2013-04-11 155 views
6

我有这种情况:自动映射继承与功能NHibernate

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和一个属性)。如果我删除IncludeBase(),则会创建A1和A2(具有所有属性)。

AutoMap 
    .AssemblyOf<ABase>() 
    .Where(e => e.Namespace == "ANamespace") 
    .IgnoreBase<ABase>(); 

如何编写映射到有类A表(所有A和ABASE属性)在我的数据库,但不为类ABASE,A1和A2(具有特殊性能的)?

回答

2

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

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

我希望这将帮助一些类似的问题...