2015-11-11 276 views
0

即時通訊使用NHibernate在我的項目,我有一隊士兵表:功能NHibernate - 映射層次

ID, FIRSTNAME, LASTNAME, COMMANDERID 

所以每一個士兵都有一個COMMANDE whicn也是一名軍人。

我有類士兵:

public class Soldier 
    { 
     public virtual int Id { get; set;} 
     public virtual Soldier Commander { get; set; } 
     public virtual IList<Soldier> Soldiers { get; set; } 
    } 

我的問題是,我該如何映射士兵財產? 我試過以下內容:

HasMany(x => x.Soldiers).KeyColumn("COMMANDERID"); 

但即時通知異常。

+1

映射只是似乎是正確的。你能分享這個例外嗎? –

回答

0

你在這裏是與類本身(而不是另一類)的一對多關係。所以我相信你必須同時在你的戰士類映射中指定「參考」和「HasMany」。因此,我認爲對於類士兵正確的地圖會是這樣的:

Table("Soldier"); 
Id(x => x.ID).GeneratedBy.Identity(); 
Map(x => x.FIRSTNAME); 
Map(x => x.LASTNAME); 
Reference(x => x.Commander).Column("COMMANDERID"); //Parent 
HasMany(x => x.Soldiers).Cascade.All().Inverse().KeyColumn("COMMANDERID"); //Children 

不能確定有關反和Cascade將如何解決,一旦我們談論的是同一個實體。您可能需要測試它。

此的其他問題也可以幫助你解決你的問題(在非常類似的情景):Fluent/NHibernate Collections of the same class