我有这种情况:

public namespace ANamespace
{
    public abstract class ABase:IABase
    {
        //properties
    }

    public abstract class A : ABase
    {
        //properties
    }

    public class A1 : A
    {
        //properties
    }

    public class A2 : A
    {
        //properties
    }
}

如果我使用此映射代码:
AutoMap
   .AssemblyOf<ABase>()
   .Where(e => e.Namespace == "ANamespace")
   .IncludeBase<A>().IgnoreBase<ABase>();

仅创建一个表(具有ABase和A属性)。如果删除IncludeBase(),则会创建A1和A2(具有所有属性)。
AutoMap
   .AssemblyOf<ABase>()
   .Where(e => e.Namespace == "ANamespace")
   .IgnoreBase<ABase>();

如何编写映射以在数据库中为类A(具有所有A和ABase属性),A1和A2(具有特定属性)而不是对于ABase类具有表?

最佳答案

三天后,我终于找到了解决此问题的方法。拥有IncludeBase<T>()是不够的。您也必须映射基类。因此,解决方案是:

AutoMap
  .AssemblyOf<ABase>()
  .Where(type=>type.IsSubclassOf(typeof(A)) || type==typeof(A))
  .IncludeBase<A>();

我希望它将帮助解决一些类似的问题...

关于c# - 使用Fluent nhibernate自动映射继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15943736/

10-10 19:20