Cra*_*erz 5 nhibernate nhibernate-mapping

我在这里拉我的头发试图弄清楚如何映射下面列出的 UsersRoles 表。我不好看秃头所以请帮忙:)
//这里是实体
public class UsersRole
{
public UsersRole() { }
public virtual User User { get; set; }
public virtual Role Role { get; set; }
public virtual System.Guid UserId { get; set; }
public virtual System.Guid RoleId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
//这是到目前为止的映射
public class UsersRoleMap : ClassMapping<UsersRole>
{
public UsersRoleMap()
{
Table("UsersRoles");
Lazy(true);
// ComponentAsId(); How does this work??
Property(x => x.UserId, map => map.Column(c =>
{
c.Name("UserId");
c.NotNullable(true);
c.Length(30);
c.SqlType("uniqueidentifier");
}));
Property(x => x.RoleId, map => map.Column(c =>
{
c.Name("RoleId");
c.NotNullable(true);
c.Length(30);
c.SqlType("uniqueidentifier");
}));
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅 ComponentAsId 映射中的注释
提前致谢,如果有人能让我走上正轨
您正在寻找的方法称为ComposedId:
public class UsersRoleMap : ClassMapping<UsersRole>
{
public UsersRoleMap()
{
ComposedId(map =>
{
map.Property(x => x.UserId);
map.Property(x => x.RoleId);
});
}
}
Run Code Online (Sandbox Code Playgroud)
回答您关于如何ComponentAsId工作的问题。你应该有以下类来使用ComponentAsId方法
public class UsersRoleId
{
public System.Guid UserId { get; set; }
public System.Guid RoleId { get; set; }
}
public class UsersRole
{
public virtual User User { get; set; }
public virtual Role Role { get; set; }
public virtual UsersRoleId Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在您可以将 UsersRole.Id 映射为 ComponentAsId
public class UsersRoleMap : ClassMapping<UsersRole>
{
public UsersRoleMap()
{
ComponentAsId(x => x.Id);
}
}
Run Code Online (Sandbox Code Playgroud)
PS:为什么需要映射UsersRoles表?我建议您将用户映射到多对多关系的角色。
public class UsersMap : ClassMapping<User>
{
public UsersMap()
{
Set(x => x.Roles, x => { }, x => x.ManyToMany());
}
}
public class RolesMap : ClassMapping<Role>
{
public RolesMap()
{
Set(x => x.Users, x => { }, x => x.ManyToMany());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |