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  
}

これらのクラスはすべて同じテーブルにマップされるため、クラス階層ごとのテーブル戦略を使用しています。

私が持っている自動マップのオーバーライドは次のようになります。

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 を使用しています。

手動マッピングを使用してこれを機能させる方法は知っていますが、これらのクラスには自動マッピングされる他の多くの情報があり、それを維持したいと考えています。

4

1 に答える 1

2

SubClassオーバーライドに呼び出しを含めないでください。それらは自動マッピングによって自動的に選択されます。

于 2009-12-10T09:28:59.770 に答える