如何在nhibernate中实现导航属性
本文关键字:实现 导航 属性 nhibernate | 更新日期: 2023-09-27 17:51:19
我有一个使用NHibernate的域模型的场景,它看起来像下面这样。
public class BaseClass
{
public virtual int Id { get; set; }
public virtual string SomeProperty { get; set; }
}
public class FirstClass : BaseClass
{
public virtual IList<AnotherClass> AnotherClassList { get; set; }
}
public class SecondClass : BaseClass
{
public virtual AnotherClass AnotherClass { get; set; }
}
public class AnotherClass
{
public virtual int Id { get; set; }
public virtual BaseClass MyNavigationalProperty { get; set; }
}
它看起来不错,但它不工作,因为我期待它会做。
作为我的第一步我在列表中保存了一个或多个AnotherClass的FirstClass,它工作得很好。我可以在列表中检索FirstClass和相关的AnotherClasses。
在我的第二步我单独保存一个新的AnotherClass,并从我的第一步设置MyNavigationalProperty到我的FirstClass。它看起来很棒,但是…
在我的最后一步我正在检索我的FirstClass,我期待我的AnotherClassList包含我的第二步的AnotherClass。但是我只从我的第一步得到原来的AnotherClasses。
查看数据库,我可以看到从我的第二步的记录,但有两个单独的fk表AnotherClass, BaseClass_Id和FirstClass_Id, FirstClass_Id是NULL,因此我没有得到这个记录在我的最后一步。
这是实现导航属性的错误方式吗?如果是这样,我该怎么做呢?还是……简单地说,有没有更好的方法来做到这一点?
编辑
从Thilak的映射问题我得到了另一个想法,原来的领域模型没有使用BaseClass,这是我的实现。这样就有必要创建我自己的映射吗?这是否意味着我必须完全放弃自动映射?
引用使用另一列作为集合。你可以手动重写
class SetForeignKeyColumn : IAutomappingOverride<FirstClass>
{
public ...
{
instance.HasMany(x => x.AnotherClassList).KeyColumn("baseclass_id");
}
}