首页 文章

在Fluent NHibernate中自动化子类

提问于
浏览
2

我在使用流畅的nhibernate来正确映射我所拥有的类层次结构时遇到了一些麻烦 .

假设我有以下类结构

public abstract class MedicationAction
{
   ... Id and other attributes
   public virtual MedicationStatus MedStatus { get; protected set; }
}

public class CeaseAction : MedicationAction
{
   ... other properties that I want to be auto mapped
}

public class StartAction : MedicationAction
{
   ... other properties that I would like to be auto mapped  
}

所有这些类都映射到同一个表,所以我使用的是每个类的表层次结构策略 .

自动 Map 覆盖我看起来像这样:

public class MedicationActionMap : IAutoMappingOverride<MedicationAction>
{
    public void Override(AutoMapping<MedicationAction> mapping)
    {
         mapping.DiscriminateSubClassesOnColumn("MedActionTypeCode");

         mapping.SubClass<CeaseAction>("Cease");
         mapping.SubClass<StartAction>("Start");
    }

在我的AutoPersistenceModel生成代码中,我有以下内容

return AutoMap.AssemblyOf<MedicationAction>()
      .... etc. 
      .Setup(s => 
           {
               ... etc.
               s.SubclassStrategy => SubclassStrategy.Subclass;
           }

2个问题:1 . 我是否应该对StartAction和CeaseAction类进行自动映射覆盖,并将.Subclass方法放在那里,而不是在MedicationAction自动映射覆盖中,就像我在这里一样? 2.在这个自动映射产生的hbm中,我得到以下内容(摘录):

<class name="MedicationAction">
    ...
    <discriminator type="String">
      <column name="discriminator" />
    </discriminator>
    ...
    <subclass name="CeaseAction" />
    <subclass name="StartAction" />
    ...
 </class>

如您所见,鉴别器列和值被完全忽略 . 如果我删除该行(s => s.SubclassStrategy = t => SubclassStrategy.Subclass),我得到正确的鉴别器列,但随后所有子类元素成为连接子类元素 . 如何让子类策略实际获取我的鉴别器列和值?我正在使用Fluent NHibernate 1.0 RTM .

我知道如何使用手动映射来实现这一点,但是这些类中有很多其他信息是自动映射的,我想保留它 .

1 回答

  • 2

    您不应该在覆盖中进行 SubClass 调用 . 它们将通过自动化自动拾取 .

相关问题