我正在学习QueryOver的过程中,但我无法弄清楚如何做一个简单的多对多查询。NHibernate与多对多的QueryOver
我有三个表,用户,角色和结UserRoles。
Users UserRoles Roles
======= ============= =========
UserId UserId RoleId
Username RoleId Role
Firstname Date
我的表的连接是这样的:
Users.UserId -> UserRoles.UserId
Roles.RoleId -> UserRoles.RoleId
我试图使用QueryOver基本替代的选择了spefic用户名中的作用:
SELECT
dbo.Roles.Role
FROM dbo.Roles
INNER JOIN dbo.UserRoles
ON dbo.Roles.RoleId = dbo.UserRoles.RoleId
INNER JOIN dbo.Users
ON dbo.UserRoles.UserId = dbo.Users.UserId
WHERE (Username = @Username)
类:
public class Roles
{
public virtual int RoleId { get; set; }
public virtual string Role { get; set; }
}
public class UserRoles
{
public virtual int UserId { get; set; }
public virtual int RoleId { get; set; }
public virtual DateTime Date { get; set; }
}
public class Users
{
public virtual int UserId { get; set; }
public virtual string Username { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Email { get; set; }
public virtual DateTime Date { get; set; }
}
地图坪:
<class name="Roles">
<id name="RoleId">
<generator class="native" />
</id>
<property name="Role" />
</class>
<class name="UserRoles">
<property name="UserId" />
<property name="RoleId" />
<property name="Date" />
</class>
<class name="Users">
<id name="UserId">
<generator class="native" />
</id>
<property name="Username" />
<property name="FirstName" />
<property name="LastName" />
<property name="Email" />
<property name="Date" />
</class>
我试过的东西,但我还差得远:
var result = session.QueryOver<Users>()
.Right.JoinQueryOver<Roles>(x => x.UserId)
.Where(c => c.RoleId == roleid)
.List();
你能告诉你的映射?正确的查询取决于这些类是如何映射到对方与NHibernate – 2015-02-09 19:57:54
@AndrewWhitaker编辑的问题,包括映射,谢谢。 – 2015-02-10 07:52:05
@AndrewWhitaker offtopic:看起来你的名字对我来说很熟悉,因为昨天我检查了你的一些博客帖子,嘿嘿:) – 2015-02-10 08:05:46