2015-11-11 198 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