在流畅的nHibernate中使用派生类

Dan*_*ams 3 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;}
}
Run Code Online (Sandbox Code Playgroud)

请注意,"base"没有表格.它只包含许多表之间共享的许多公共字段.是的,我知道这不是很正常,但这是我必须要做的事情.

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

Col*_*e W 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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