2
最近我遇到了一个奇怪的行为在自动映射的流利NHibernate。我有以下的阶级结构(为了酿造起见,一些属性被切断了)。NHibernate自动映射问题
public class UserGroup
{
public virtual UserGroup ParentGroup { get; set; }
public virtual UserGroupMember Manager { get; protected set; }
public virtual ISet<UserGroupMember> Members { get; protected set; }
}
和
public class UserGroupMember : BaseEntity
{
public virtual User User { get; set; }
public virtual UserGroup Group { get; set; }
}
用于用户组的映射:
public class UserGroupMap : IAutoMappingOverride<UserGroup>
{
public void Override(AutoMapping<UserGroup> mapping)
{
mapping.HasMany(el => el.Members)
.Cascade
.AllDeleteOrphan().Inverse().LazyLoad();
}
}
的自动映射在UserGroupMember表创建两个柱(两者均为外键),以反映用户组之间的关系和UserGroupMembers。我发现,所产生的映射包含错误的列(如下图所示):
<set cascade="all-delete-orphan" inverse="true" lazy="true" name="Members" mutable="true">
<key>
<column name="Parent_Id" />
</key>
<one-to-many class="Groups.Data.UserGroupMember, Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</set>
导致错误的查询:
- 虽然UserGroupMember插入 - 用于分组ID(这是正确的) ,虽然在UserGroupMember选择不使用PARENT_ID
- - 用于PARENT_ID
分组ID是在UserGroupMember映射文件反映了组PROPERT列y在UserGroupMember中。
我试图修改添加.KeyColumn(“Group_Id”)的映射,它解决了问题。但是有没有什么办法可以让流利的NHibernate“以正确的方式思考”?
我不认为是这样。这是一对多的关系。我认为问题可能是我有两个属性,一个是UserGroupMember,另一个是ISet。 –
2011-05-06 10:49:57