我在我的项目中使用了nhibernate,我有一个士兵表:
ID, FIRSTNAME, LASTNAME, COMMANDERID所以每个士兵都有一个指挥部,它也是一个士兵。
我有一个Soldier类:
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");但是我得到了一个例外。
发布于 2015-11-11 23:58:00
您在这里拥有的是与类本身的一对多关系(而不是另一个类)。因此,我相信您必须在类Soldier的映射中同时指定"Reference“和"HasMany”。因此,我认为类Soldier的正确映射应该如下所示:
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
https://stackoverflow.com/questions/33648075
复制相似问题