RavenDB 查询 属性 of Id struct
RavenDB query on property of Id struct
我正在尝试根据一个 属性 自定义 ID 结构在 RavenDb 中定位文档:
struct UserId {
public int CompanyCode { get; set; }
public int EmployeeCode { get; set; }
}
class User {
public UserId Id { get; set; }
public string SomeData { get; set; }
}
class UserIdConverter : ITypeConverter {
public bool CanConvertFrom(Type t) { return t == typeof(UserId); }
public string ConvertFrom(string tag, object value, bool allowNull) { ... }
public object ConvertTo(string value) { ... }
}
此查询总是没有结果:
public User[] GetUsersByCompanyCode(int companyCode)
{
var users = (from u in _session.Query<User>()
where u.Id.CompanyCode == companyCode
select u).ToArray();
return users;
}
然而,这个版本 returns 正确的结果:
public User[] GetUsersByCompanyCode(int companyCode)
{
var users = (from u in _session.Query<User>().ToArray()
where u.Id.CompanyCode == companyCode
select u).ToArray();
return users;
}
在不加载所有文档的情况下实现此目的的最佳方法是什么?
RavenDB默认使用Id
属性作为文档的标识,不支持复杂类型(据我所知)。我推荐阅读 Working with document identifiers.
一般来说你可以在Conventions.FindIdentityProperty
中更改身份属性的名称,但我建议更改UserId
属性的名称并有一个额外的属性 Id
类型 string
:
class User {
public string Id { get; set; }
public UserId UserId { get; set; }
public string SomeData { get; set; }
}
我正在尝试根据一个 属性 自定义 ID 结构在 RavenDb 中定位文档:
struct UserId {
public int CompanyCode { get; set; }
public int EmployeeCode { get; set; }
}
class User {
public UserId Id { get; set; }
public string SomeData { get; set; }
}
class UserIdConverter : ITypeConverter {
public bool CanConvertFrom(Type t) { return t == typeof(UserId); }
public string ConvertFrom(string tag, object value, bool allowNull) { ... }
public object ConvertTo(string value) { ... }
}
此查询总是没有结果:
public User[] GetUsersByCompanyCode(int companyCode)
{
var users = (from u in _session.Query<User>()
where u.Id.CompanyCode == companyCode
select u).ToArray();
return users;
}
然而,这个版本 returns 正确的结果:
public User[] GetUsersByCompanyCode(int companyCode)
{
var users = (from u in _session.Query<User>().ToArray()
where u.Id.CompanyCode == companyCode
select u).ToArray();
return users;
}
在不加载所有文档的情况下实现此目的的最佳方法是什么?
RavenDB默认使用Id
属性作为文档的标识,不支持复杂类型(据我所知)。我推荐阅读 Working with document identifiers.
一般来说你可以在Conventions.FindIdentityProperty
中更改身份属性的名称,但我建议更改UserId
属性的名称并有一个额外的属性 Id
类型 string
:
class User {
public string Id { get; set; }
public UserId UserId { get; set; }
public string SomeData { get; set; }
}