2

いくつかの種類のドキュメントをスキャンするドキュメントスキャンシステムがあります。最初は、ドキュメントはスキャンされたときに情報を持っていません。その後、ドキュメントは分類され、後の2番目のステップで追加情報が入力されます。したがって、Documentという基本クラスと、以下のようにそれぞれのメタデータを持つ各タイプのサブクラスがあります。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
}

私ができる必要があるのは、最初にDocumentクラスを作成し、それを保存することです。次に、後の2番目のステップで取得し、それをサブクラスタイプのいずれかに変換して、残りの情報を入力します。これを行うための最良のアプローチは何でしょうか、そしてこれはNHibernateでも可能ですか?可能であれば、元の文書記録を保持したいのですが、それを投棄しなければならない場合、それは大したことではありません。

4

2 に答える 2

3

残念ながら、NHibernateでは最初の作成後にサブクラスを切り替えることはできません。これを希望どおりに機能させるには、次の3つのオプションがあります。

  1. ネイティブSQL呼び出しを使用して、ディスクリミネーターを変更し(場合によっては)、サブクラス関連のフィールドを追加または変更します。
  2. オブジェクトの内容を適切なクラスの新しいオブジェクトにコピーしてから、元のオブジェクトを削除します。
  3. サブクラスを使用しないでください。列挙または実行時にサブクラスのタイプを判別できるその他のメカニズムを使用して、オブジェクトの状態を制御してください。
于 2010-09-20T20:31:06.273 に答える
2

この問題はすでにここで説明されています。私はこれのために役割を使用するためにテリーウィルコックスのヒントに行きます。継承をめぐる構成。

于 2010-09-20T20:55:23.703 に答える