nhibernate を使用して、ディスクリミネータに基づいて 1 つのテーブルから複数の異なる派生クラスにレコードをマップするシナリオがあります。
public class BaseClass { }
public class DerivedClass0 : BaseClass { }
public class DerivedClass1 : BaseClass { }
public class DerivedClass2 : BaseClass { }
次に、nhibernate の DiscriminateSubClassesOnColumn() メソッドを使用し、構成を変更して以下を含めます。
<subclass name="DerivedClass0" extends="BaseClass" discriminator-value="discriminator0" />
<subclass name="DerivedClass1" extends="BaseClass" discriminator-value="discriminator1" />
<subclass name="DerivedClass2" extends="BaseClass" discriminator-value="discriminator2" />
そのため、マップされると、これらのクラスは BaseClass ではなく派生クラスにキャストされます。
ただし、データベースには、対応するサブクラスを持たない識別子を持つレコードがいくつかあります。これらの場合、nHibernate はエラーをスローします。
"Object with id: 'xxx' was not of the specified subclass..."
エラーがスローされるのではなく、対応するサブクラスを持たないレコードが BaseClass にキャストされるように、これを処理する方法はありますか?
上記を可能な限り単純化しましたが、XML は動的に編集されることに注意してください。そのため、流暢な nhibernate [DiscriminateSubClassesOnColumn()] と XML を同時に参照しています。
次のこと (これは役に立ちます) はオプションではありません。
- データを修正して無効なレコードを削除することはできません
- サブクラスを持たないレコードのサブクラスを作成できません
nHibernate がディスクリミネーターにマップしようとして、ディスクリミネーターが存在しない場合を処理する必要があります。