NHibernate-具有包含空值的值对象的查询
我有一个值对象,如下所示:NHibernate-具有包含空值的值对象的查询,nhibernate,Nhibernate,我有一个值对象,如下所示: public class PersonMapping : ComponentMap<Person> { public PersonMapping() { Map(x => x.FirstName).Not.Nullable().Length(96); Map(x => x.LastName).Not.Nullable().Length(96); Map(x => x.Midd
public class PersonMapping : ComponentMap<Person>
{
public PersonMapping()
{
Map(x => x.FirstName).Not.Nullable().Length(96);
Map(x => x.LastName).Not.Nullable().Length(96);
Map(x => x.MiddleName).Nullable().Length(96);
Map(x => x.NickName).Nullable().Length(64);
}
}
没有错误的记录匹配。
当我更改生成的查询并用如下值替换参数时:
...
where (objectoffi1_.FirstName = 'Anneliese' and objectoffi1_.LastName = 'ObjectOfficer_1'
and objectoffi1_.NickName is null and objectoffi1_.MiddleName is null)
它返回正确数量的结果。有人知道怎么处理这件事吗?如果NHibernate将字段=NULL改为字段为NULL发送到MS SQL Server,则不会返回任何结果,因为它错误的TSQL。有什么想法吗?结果表明,在where子句中不可能放置具有可为空属性的值对象。您必须自己在代码中关心这些潜在的空值。一旦您直接逐字段比较字段,它就会起作用。以下是“正确”版本:
var query = NhSession.Query<ServiceContract>()
.Where(s => s.ObjectOfficer.Manager.FirstName == owner.FirstName
&& s.ObjectOfficer.Manager.LastName == owner.LastName);
contracts = query.ToList();
var query=NhSession.query()
.Where(s=>s.ObjectOfficer.Manager.FirstName==owner.FirstName
&&s.ObjectOfficer.Manager.LastName==所有者.LastName);
contracts=query.ToList();
我认为这不仅仅是不方便,我不知道像EF这样的其他ORM是否也有同样的问题。值对象是DDD的一个重要组成部分。您使用的是什么nhibernate版本和什么MSSQL方言?我使用的是最新版本,NH 4.0.4.4000、FNH 2.0.3、SQL方言2012、SQL Server 2014,但2012是NH支持的最新版本。
...
where (objectoffi1_.FirstName = 'Anneliese' and objectoffi1_.LastName = 'ObjectOfficer_1'
and objectoffi1_.NickName is null and objectoffi1_.MiddleName is null)
var query = NhSession.Query<ServiceContract>()
.Where(s => s.ObjectOfficer.Manager.FirstName == owner.FirstName
&& s.ObjectOfficer.Manager.LastName == owner.LastName);
contracts = query.ToList();