我有一个与 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; }
}
它看起来不错,但它不像我预期的那样工作。这是我的场景;
作为我的第一步,我将我的 FirstClass 与列表中的一个或多个 AnotherClass 一起保存,它运行良好。我可以用列表中的相关 AnotherClasses 检索我的 FirstClass。
在我的第二步中,我将单独保存一个新的 AnotherClass,并将 MyNavigationalProperty 从我的第一步设置为我的 FirstClass。它看起来确实很棒,但是...
在我的最后一步中,我正在检索我的 FirstClass,并且我期望我的 AnotherClassList 包含我第二步中的 AnotherClass。但是我只从第一步中获得了原始的 AnotherClasses。
查看数据库,我可以看到第二步的记录,但表 AnotherClass、BaseClass_Id 和 FirstClass_Id 中有两个单独的 FK,FirstClass_Id 为 NULL,因此我在最后一步中没有得到此记录。
这是实现导航属性的错误方法吗?如果是这样,我应该如何正确地做到这一点?或者......简单地说,有没有更好的方法来做到这一点?
编辑
从Thilak的映射问题我得到了另一个想法,原来的域模型没有使用BaseClass,那是我的实现。那是否有必要创建我自己的映射?这是否意味着我必须完全放弃自动映射?