好的。我已经阅读了很多类似的情况,但它们都似乎更多地与一对多映射有关。NHibernate多对多映射无效列任意[table] _ [id]
长话短说...这是代码。
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.Roles#1] [SQL:SELECT roles0_.UserID为UserID1_,roles0_.Roles_id为Roles4_1_,roles1_.RoleID为RoleID1_0_,roles1_.RoleDescription为RoleDesc2_1_0_ ,roles1_.RoleName为RoleName1_0_,roles1_.RoleGUID作为RoleGUID1_0_ FROM roles0_左外Web_UserRoles加入Web_Roles roles1_上roles0_.Roles_id = roles1_.RoleID WHERE roles0_.UserID =?]
它并不需要太多意识到映射将RoleID从我的“映射实体”UserRoles转换为Roles_id,我不明白为什么。我遵循NHibernate确切的“方式”,但我似乎没有得到它的直线。
如果我通过RoleID替换SQL Server Roles_id,它就像一个魅力。显然,我有一个命名约定问题或映射问题本身。
正如我写这篇文章,我看到类似的问题突然出现在我的右边的问题,但没有一个能解决我的问题。
谢谢。
难道我的回答帮助呢? – CSL