在流畅的nHibernate中使用派生类

时间:2012-08-28 07:23:00

标签: fluent-nhibernate

我有两个共享公共字段的表。我没有重新映射所有这些,而是​​希望有一个带有公共字段的基类。对于POCO,这很简单:

class Base
{
   public string commonField {get;set;}
}
class Derived : Base
{
   public string specificField {get;set;}
}
class OtherDerived : Base
{
   public string specificOtherField {get;set;}
}

请注意,“base”没有表格。它只包含许多表之间共享的许多公共字段。是的,我知道这不是很正常,但这是我必须要合作的。

我的问题是 - 有没有办法在流畅的nHibernate中实现这一点,而不必复制映射这些常见属性的代码?

1 个答案:

答案 0 :(得分:7)

您可以从ClassMap继承来执行此操作。我会做类似以下的事情:

public class BaseMap<T> : ClassMap<T> where T : Base
{
    public BaseMap()
    {
        Map(x => x.commonField, "COMMON_FIELD");
    }
}

public class DerivedMap : BaseMap<Derived>
{
    public DerivedMap()
    {
        Table("DERIVED_TABLE");
        Polymorphism.Explicit();  //You may want to use this in your case.
        Map(x => x.DerivedField, "DERIVED_FIELD");
    }
}

注意上面的Polymorphism.Explicit();。在你的情况下,我认为你会想要这个。

http://www.nhforge.org/doc/nh/en/#mapping-declaration-class