Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Fluent-NHibernate中的自动映射子类_C#_Nhibernate_Fluent Nhibernate_Subclassing - Fatal编程技术网

C# Fluent-NHibernate中的自动映射子类

C# Fluent-NHibernate中的自动映射子类,c#,nhibernate,fluent-nhibernate,subclassing,C#,Nhibernate,Fluent Nhibernate,Subclassing,我在让fluent nhibernate正确映射我拥有的类层次结构时遇到了一些问题 假设我有以下的类结构 public abstract class MedicationAction { ... Id and other attributes public virtual MedicationStatus MedStatus { get; protected set; } } public class CeaseAction : MedicationAction { ...

我在让fluent 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");
    }
公共类MedicinationActionMap:IAutoMappingOverride
{
公共无效替代(自动映射)
{
mapping.DiscriminateSubClassesOnColumn(“MedActionTypeCode”);
映射。子类(“停止”);
子类(“开始”);
}
在我的AutoPersistenceModel生成代码中,我有以下内容

 return AutoMap.AssemblyOf<MedicationAction>()
      .... etc. 
      .Setup(s => 
           {
               ... etc.
               s.SubclassStrategy => SubclassStrategy.Subclass;
           }
return AutoMap.AssemblyOf()的
等
.设置(s=>
{
等
s、 SubclassStrategy=>SubclassStrategy.Subclass;
}
2个问题: 1.我是否应该为StartAction和CeaseAction类设置自动映射覆盖,并将.Subclass方法放在其中,而不是像这里一样放在MedicationAction自动映射覆盖中? 2.在这个自动映射产生的hbm中,我得到以下内容(摘录):


...
...
...
如您所见,鉴别器列和值被完全忽略我得到了正确的鉴别器列,但是所有的子类元素都变成了连接的子类元素。我如何得到子类策略来实际提取我的鉴别器列和值?我使用的是Fluent NHibernate 1.0 RTM


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

您不应该在覆盖中包含
子类调用。它们将通过自动映射自动拾取。

除了无法设置鉴别器之外tor值。如果您不满意鉴别器值作为类名,则可以实现
ISubclassConvention
。方法AutoMapping.SubClass()的目的是什么?
<class name="MedicationAction">
    ...
    <discriminator type="String">
      <column name="discriminator" />
    </discriminator>
    ...
    <subclass name="CeaseAction" />
    <subclass name="StartAction" />
    ...
 </class>