Fluent Nhibernate - 映射层次结构

时间:2015-11-11 09:55:36

标签: c# nhibernate fluent-nhibernate

我在我的项目中使用了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");

但是我得到了例外。

1 个答案:

答案 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