nhibernate - 对可选引用进行 QueryOver 和 null 检查

标签 nhibernate queryover

我有一个与可选 UserData 具有 1-1 关系的用户。他们在数据库中共享相同的标识符。

User
 Id(x => Id, "id")
 References<UserData>(x => x.UserData, "id");

UserData
 Id(x => Id, "id")

我想查询所有没有可选数据的用户。 但此查询对 User ID 列进行 null 检查。

var list = session.QueryOver<User>()
   .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");

        }
    }

您可以尝试:

        UserData userDataAlias = null;

        var results = session.QueryOver<User>()
            .Left.JoinQueryOver(x=>x.Data,()=>userDataAlias)
            .WhereRestrictionOn(y=>y.Id).IsNull
            .List();

使用LEFT OUTER JOINIS NULL 子句生成的查询将如下所示:

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

关于nhibernate - 对可选引用进行 QueryOver 和 null 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353231/

相关文章:

c# - 使用方法在 LINQ 中投影嵌套 DTO

nhibernate - Hibernate/NHibernate 映射文件编辑器

c# - NHibernate QueryOver : How to join unrelated entities?

c# - 在 nhibernate queryover 查询中指定获取策略(选择、连接等)

NHibernate,具有相同标识符值的另一个对象已与该 session 关联

NHibernate:有条件地加载计算列

linq - Nhibernate 为 fetch 生成 OUTER JOIN

c# - nHibernate 不解析所有字段的属性

c# - 具有附加连接条件的 NHibernate QueryOver .Left.JoinAlias

sql - Nhibernate count distinct(基于多列)