我在我的项目中使用了nhibernate,我有一张士兵表:
ID, FIRSTNAME, LASTNAME, COMMANDERID
所以每个士兵都有一名士兵。
我有班级士兵:
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");
但是我得到了例外。
答案 0 :(得分:0)
你在这里有一个与班级本身(而不是另一个班级)的一对多关系。所以我相信你必须在Soldier类的映射中指定“Reference”和“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
一旦我们谈论同一个实体,不确定Inverse和Cascade将如何运作。您可能需要测试它。
这个问题也可以帮助您解决问题(场景非常相似):Fluent / NHibernate Collections of the same class