Fluent nhibernate NHibernate多对多映射无效列任意[table]\uID]
嗯。我读过很多类似的情况,但它们似乎都与一对多映射有关 长话短说。。。这是代码Fluent nhibernate NHibernate多对多映射无效列任意[table]\uID],fluent-nhibernate,many-to-many,fluent-nhibernate-mapping,Fluent Nhibernate,Many To Many,Fluent Nhibernate Mapping,嗯。我读过很多类似的情况,但它们似乎都与一对多映射有关 长话短说。。。这是代码 public class Roles { public virtual int RoleID { get; protected set; } public virtual Guid RoleGUID { get; protected set; } public virtual string RoleName { get; protected set; }
public class Roles
{
public virtual int RoleID { get; protected set; }
public virtual Guid RoleGUID { get; protected set; }
public virtual string RoleName { get; protected set; }
public virtual string RoleDescription { get; protected set; }
public virtual IList<User> Users { get; protected set; }
}
public class RolesMap:ClassMap<Roles>
{
public RolesMap()
{
Table("Web_Roles");
Id(x => x.RoleID);
Map(x => x.RoleDescription);
Map(x => x.RoleName);
Map(x => x.RoleGUID);
HasManyToMany(x => x.Users)
.Cascade.All()
.Inverse()
.Table("Web_UserRoles");
}
}
public class User
{
public virtual int UserID { get; protected set; }
public virtual string UserName { get; protected set; }
public virtual string Password { get; protected set; }
public virtual string Email { get; protected set; }
public virtual Guid UserGUID { get; protected set; }
public virtual IList<Roles> Roles { get; protected set; }
}
public class UserMap: ClassMap<User>
{
public UserMap()
{
Table("Web_User");
Id(x => x.UserID);
Map(x => x.UserName);
Map(x => x.Password);
Map(x => x.UserGUID);
Map(x => x.Email);
HasManyToMany(x => x.Roles)
.Cascade.All()
.Table("Web_UserRoles");
}
}
public class UserRoles
{
public virtual int RoleID { get; protected set; }
public virtual int UserID { get; protected set; }
}
这就是域实体和它们各自的映射。没什么大不了的。当然,没有UserRoles的映射,因为它只是一个映射表
当我得到我的用户时,我得到以下错误
无法初始化集合:[FamilyDerm.AUTH.Domain.User.Roles1][SQL:选择角色0。UserID作为UserID1,角色0。角色id作为Roles4,角色1。角色id作为RoleID1,角色1。角色描述作为RoleDesc2,角色1,角色1。角色名称作为RoleName1,角色1。角色名称作为RoleName1,角色1。角色名称作为RoleName1,角色1。角色名称作为RoleGUID1,角色0从Web角色角色角色0离开外部加入Web角色1。角色id=roleuid=rolled1。其中,角色id=roles0]
不需要花太多时间就可以意识到映射正在将RoleID从映射实体UserRoles转换为Roles_id,我不明白为什么。我正按照NHibernate的方式进行操作,但我似乎没有弄清楚
如果我用RoleID替换SQL Server中的角色id,它就像一个符咒,显然我有命名约定问题或映射问题本身
当我写这篇文章的时候,我看到我的右边突然出现了一些问题,这些问题与我的担忧类似,但没有一个能解决我的问题
谢谢。因为您尚未在Web\u UserRoles表中明确声明字段名,所以nHibernate通过向子集合的名称添加一个\u Id来推断字段名
HasManyToMany(x => x.Users)
.Cascade.All()
.Inverse()
.Table("Web_UserRoles");
将在Web_UserRoles表中推断名为Users_Id的字段,同样,将从HasManyToMany角色映射中推断Roles_Id
修改HasManyToMany定义以显式定义ProductInProduct表中的父Id列和子Id列应该对问题进行排序:
HasManyToMany(x => x.Users)
.Cascade.All()
.Inverse()
.Table("Web_UserRoles")
.ParentKeyColumn("UserId")
.ChildKeyColumn("RoleId");
及
我的回答有帮助吗?
HasManyToMany(x => x.Roles)
.Cascade.All()
.Table("Web_UserRoles")
.ParentKeyColumn("RoleId")
.ChildKeyColumn("UserId");