2009-09-17 31 views
1

這是我的分貝: tblGroups: 羣ID 組名功能NHibernate映射的問題 - 多對多的數據

tblMembersInGroup 羣ID MEMBERID 排名

tblMembers MEMBERID 名稱

這是我的型號:

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,沒有標識對象?並沒有組對象? 但帶有額外的排名數據。該數據庫擁有所有的數據,我需要一種方法來創建正確的類...

感謝,

達尼

回答

0

是否有一個原因,你需要映射EnlistedMembers?如果沒有,你可以這樣映射Group.MyMembers:

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

但是EnlistedMember有一個等級字段 - 需要攜帶更多的數據!那是什麼使問題... – Dani 2009-09-17 14:55:23

+0

Got,錯過了那個成員。你可以添加EnlistedMember.Group嗎?會員。入選? – mxmissile 2009-09-17 15:12:20

+0

我想我可以,它會讓它更容易。我雖然有可能在沒有它們的情況下進行映射(從數據模型的角度來看,這些對象具有我需要的所有東西,而添加只會消耗內存,不會被使用)。但是..我找不到一個體面的例子,用於涉及額外數據的多對多映射... – Dani 2009-09-17 15:45:10

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從成員繼承。我也很確定它會對你在tblMembersInGroup中進行的複合鍵進行調查。我還沒有答案。

+0

EnlistedMember不能從成員繼承,因爲 成員可以與一些成員可以關聯的幾個對象的成員 (我是3個組中的成員,每個組中的成員都有不同的排名) - 我不想創建3個成員對象並告訴他們我的名字,而是創建一個帶有名字的成員(以及所有其他詳細信息從問題中)並將其插入到具有軍銜的入伍成員對象.... – Dani 2009-09-21 07:36:36