Nhibernateのベースクラスから結合されたサブクラスタイプに変更できますか?
-
04-10-2019 - |
質問
いくつかのタイプのドキュメントがスキャンされるドキュメントスキャンシステムがあります。当初、ドキュメントにはスキャンされた場合、ドキュメントには分類され、2回目のステップで追加情報が入力されます。そのため、ドキュメントと呼ばれるベースクラスと、以下のようにそれぞれのメタデータを使用した各タイプのサブクラスがあります。 Nhibernateのサブクラスあたりのテーブル(サブクラスに参加)マッピングとしてセットアップしています。
public class Document
{
public int ID { get; set; }
public string FilePath { get; set; }
}
public class Certificate : Document
{
// certificate-specific fields
}
public class Correspondence : Document
{
// correspondence-specific fields
}
私ができる必要があるのは、最初にドキュメントクラスを作成して保存することです。次に、2番目のステップで取得して、サブクラスタイプの1つに変換し、残りの情報を入力します。これを行うための最良のアプローチは何ですか、そしてこれはNhibernateでも可能ですか?可能であれば、元のドキュメントレコードを保持したいのですが、それを放棄する必要がある場合は、それは契約を破るものではありません。
解決
残念ながら、Nhibernateでは、最初の作成後にサブクラスを切り替えることはできません。これを必要な方法で機能させるには、3つのオプションがあります。
- ネイティブSQLコールを使用して、識別子を変更または変更します。サブクラス関連フィールドを追加または変更します。
- オブジェクトの内容を適切なクラスの新しいオブジェクトにコピーしてから、オリジナルを削除します。
- サブクラスを使用しないでください。列挙または実行時にタイプを決定できる列挙またはその他のメカニズムを介してオブジェクトの状態を制御します。
他のヒント
この問題はすでに議論されています ここ. 。私はテリー・ウィルコックスのヒントを使って、これに役割を使うでしょう。継承に対する構成。
所属していません StackOverflow