我在使用流利的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
}
所有这些类都映射到同一个表,因此我使用的是每个类的表层次结构策略。
自动地图覆盖我看起来像这样:
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 =&gt; s.SubclassStrategy = t =&gt; SubclassStrategy.Subclass),我得到正确的鉴别器列,但随后所有子类元素成为连接子类元素。如何让子类策略实际获取我的鉴别器列和值?我正在使用Fluent NHibernate 1.0 RTM。
我知道如何使用手动映射来实现这一点,但这些类中有很多其他信息是自动映射的,我想保留它。
答案 0 :(得分:2)
您的覆盖不应该有SubClass
次呼叫。它们将通过自动化自动拾取。