好的。我已經閱讀了很多類似的情況,但它們都似乎更多地與一對多映射有關。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