我有两个共享公共字段的表。我没有重新映射所有这些,而是希望有一个带有公共字段的基类。对于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中实现这一点,而不必复制映射这些常见属性的代码?
答案 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();
。在你的情况下,我认为你会想要这个。