3

我有两个共享公共字段的表。我不想重新映射所有这些,而是​​希望有一个具有公共字段的基类。对于 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 中实现这一点,而不必复制映射这些公共属性的代码?

4

1 回答 1

7

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

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

于 2012-08-28T13:30:49.973 回答