【发布时间】:2016-06-16 10:26:35
【问题描述】:
我有一个像这样的值对象:
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);
}
}
我这样创建一个查询:
var owner = new Person("Anneliese", "ObjectOfficer_1");
var query = NhSession.Query<ServiceContract>()
.Where(s => s.ObjectOfficer.Manager == owner);
contracts = query.ToList();
这将创建一个 Person 的实例,该实例具有 null MiddleName 和 Nickname。 NHibernate 会像这样创建一个查询:
select .....
from .....
where (objectoffi1_.FirstName = @p0
and objectoffi1_.LastName = @p1
and objectoffi1_.MiddleName = @p2
and objectoffi1_.NickName = @p3);
@p0 = 'Anneliese' [Type: String (4000)],
@p1 = 'ObjectOfficer_1' [Type: String (4000)],
@p2 = NULL [Type: String (4000)],
@p3 = NULL [Type: String (4000)]
没有记录匹配是错误的。
当我更改生成的查询并将参数替换为如下值时:
...
where (objectoffi1_.FirstName = 'Anneliese' and objectoffi1_.LastName = 'ObjectOfficer_1'
and objectoffi1_.NickName is null and objectoffi1_.MiddleName is null)
它返回正确数量的结果。有谁知道如何处理这个?如果 NHibernate 将 field = NULL 而不是 field is null 发送到 MS SQL Server,则不会返回任何结果,因为它是 错误的 TSQL。有什么想法吗?
【问题讨论】:
-
您使用的是什么 nhibernate 版本以及什么 mssqldialect?
-
最新版本,NH 4.0.4.4000,FNH 2.0.3,SQL Dialect 2012,SQL Server 2014 是我使用的,但 2012 是 NH 支持的最新版本。
标签: nhibernate