【问题标题】:Join criteria in NHibernateNHibernate 中的加入条件
【发布时间】:2017-10-06 09:53:19
【问题描述】:

我正在努力使用 NHibernate 来实现简单的连接。

这是我所拥有的:

Post.cs:

public class Post
{
    public virtual int id { get; set; }
    public virtual string user { get; set; }
    public virtual string message { get; set; }
}

public class PostMap : ClassMapping<Post>
{
    public PostMap()
    {
        Table("post");

        Id(x => x.id, map => { map.Column("id"); });
        Property(x => x.user, map => { map.Column("user"); });
        Property(x => x.message, map => { map.Column("message"); });
    }
}

用户.cs:

public class User
{
    public virtual int id { get; set; }
    public virtual string user_identifier { get; set; }
    public virtual string username { get; set; }
}

public class UserMap : ClassMapping<User>
{
    public UserMap()
    {
        Table("user");

        Id(x => x.id, map => { map.Column("id"); });
        Property(x => x.user_identifier, map => { map.Column("user_identifier"); });
        Property(x => x.username, map => { map.Column("username"); });
    }
}

如您所见,我有 2 个“实体”帖子和用户。帖子有一个代表 user_identifier 的用户列。

这是我现在如何从我的数据库中获取所有帖子的方式:

// CriteriaGenerator is only used here to create a criteria object based on filters in the filter object
ICriteria crit = CriteriaGenerator.GenerateCriteria<Post>(session, filters);

IList<Post> posts= crit.List<Post>();

有了这个,我得到一个帖子对象的列表,每个对象在用户成员中都有 user_identifier 值。

我想更改此行为,以便能够在我的查询中加入用户表,以获取帖子列表,其中每个帖子的“用户”成员被用户的用户名替换。

hibernate 能做到吗?

【问题讨论】:

    标签: c# join nhibernate criteria


    【解决方案1】:

    NHibernate 有一些查询 API,只有一个可以支持不相关实体之间的连接:

    from user in session.Query<User>() 
    join post in session.Query<Post>() 
    on user.user_identifier equals post.user
    

    更多信息可以查看here

    或者使用像this这样的子查询。

    或者在this等实体之间添加引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2010-12-20
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多