Nhibernate 对可选引用执行QueryOver和null检查
我有一个与可选UserData具有1-1关系的用户。它们在数据库中共享相同的标识符Nhibernate 对可选引用执行QueryOver和null检查,nhibernate,queryover,Nhibernate,Queryover,我有一个与可选UserData具有1-1关系的用户。它们在数据库中共享相同的标识符 User Id(x => Id, "id") References<UserData>(x => x.UserData, "id"); UserData Id(x => Id, "id") 用户 Id(x=>Id,“Id”) 引用(x=>x.UserData,“id”); 用户数据 Id(x=>Id,“Id”) 我想查询没有可选数据的所有用户。 但此查询对用户ID列进行空
User
Id(x => Id, "id")
References<UserData>(x => x.UserData, "id");
UserData
Id(x => Id, "id")
用户
Id(x=>Id,“Id”)
引用(x=>x.UserData,“id”);
用户数据
Id(x=>Id,“Id”)
我想查询没有可选数据的所有用户。
但此查询对用户ID列进行空检查
var list = session.QueryOver<User>()
.Where(x => x.UserData != null)
var list=session.QueryOver()
.Where(x=>x.UserData!=null)
如果我使用HasOne,情况也是如此。假设您的映射是这样的:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("UserTable");
Id(x=>x.Id).Column("Id");
HasOne(x => x.Data);
}
}
public class UserDataMap : ClassMap<UserData>
{
public UserDataMap()
{
Table("UserDataTable");
Id(x => x.Id).Column("Id");
Map(x=>x.DataText).Column("DataText");
}
}
你是说生成的SQL是错误的吗?
UserData userDataAlias = null;
var results = session.QueryOver<User>()
.Left.JoinQueryOver(x=>x.Data,()=>userDataAlias)
.WhereRestrictionOn(y=>y.Id).IsNull
.List();
SELECT
this_.Id as Id14_1_,
userdataal1_.Id as Id13_0_,
userdataal1_.DataText as DataText13_0_
FROM
UserTable this_
left outer join
UserDataTable userdataal1_
on this_.Id=userdataal1_.Id
WHERE
userdataal1_.Id is null