流畅的nHibernate映射问题 - 包含数据的多对多问题

时间:2009-09-17 14:09:24

标签: fluent-nhibernate

这是我的数据库: tblGroups: 组ID 组名

tblMembersInGroup 组ID 会员ID 秩

tblMembers 会员ID 名称

这是我的模特:

class group 
{
  int groupid
  string name
  List<EnlistedMembers> myMembers;

}

class EnlistedMebmers
{
  Member myMember;
  int Rank;
}

class Member
{  
  int MemberID
  string Name
}

我不知道如何在FNH中映射它,因为Members类没有告诉FNH谁是父亲的对象。

我认为组映射是显而易见的:

 Table(tblGroup);
    Id(x => x.groupid, "GroupID').GeneratedBy.Identity();
    Map(x => x.name, "GroupName");
    HasMany(x => x.myMembers).AsList().Inverse().Cascade.All();

下一步是什么?

如何映射enlistedmembers,没有身份对象?没有组对象? 但有额外的排名数据。 db拥有所有数据,我需要一种正确创建类的方法......

谢谢,

达尼

2 个答案:

答案 0 :(得分:0)

您是否需要来映射EnlistedMembers?如果没有,你可以像这样映射Group.MyMembers:

HasManyToMany(z => z.MyMembers)
                .AsList()
                .Cascade.All()
                .Table("tblMembersInGroup")
                .ParentKeyColumn("GroupId")
                .ChildKeyColumn("MemberId");

答案 1 :(得分:0)

我怀疑这可能是一个圆孔的方形钉,但我会调查SubClassing

public class MemberMap : ClassMap<Member>
{
  public MemberMap()
  {
    Table("tblMembers");
    Id(x => x.MemberID);
    Map(x => x.Name);
  }
}

public class EnlistedMembersMap : SubclassMap<EnlistedMembers>
{
  public EnlistedMembersMap()
  {
    Table("tblMembersInGroup");
    Map(x => x.Rank);
  }
}

您需要让EnlistedMembers继承自Member。我也非常确定它会对你在tblMembersInGroup中的复合键咆哮。我还没有答案......但是。