我正在努力与NHibernate实现简单的连接。
这是我所拥有的:
邮.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值。
我想更改此行为以便能够在查询中加入 User 表,以获取每个帖子的"用户"成员替换为用户用户名的帖子列表。
冬眠可以做到吗?
NHibernate有一些查询API,只有一个可以支持不相关实体之间的连接:
from user in session.Query<User>()
join post in session.Query<Post>()
on user.user_identifier equals post.user
有关更多信息,您可以在此处查看。
或者使用这样的子查询。
或者像这样在实体之间添加引用。