ハウツー:同じ表から異なるビジネスロジックを持つマッピング(nhibernate)複数のクラス?

StackOverflow https://stackoverflow.com/questions/5831264

質問

現在、3つの異なる種類のビジネスのデータを保持するテーブルを含むBrownfieldデータベースを使用しています。それは、セロダーとオーダーラインに関係しています。古いアプリケーションでは、各販売注文に3種類のオーダーラインを追加することができました:製品、1時間ごとの料金、テキストライン。 15年前、これはDelphiで簡単なクエリを取得してすべてのラインを1つのDatagridで取得するための迅速で汚いソリューションでした。毎日

今、私はnhibernateを使用してC#でオブジェクトモデルを構築しようとしています。これらの3つのラインタイプには実際のビジネス論理的な接続がないという事実により、基本クラスのない3つの別々のエンティティを作成しました。ただし、これらの3つのタイプを1つのリストに入れて、注文できるようにしたいと思います。

テーブルが要件を満たしているため、クラスごとのテーブルの継承を使用することを検討しました(ヌットではない抑制のある列はありません)。しかし、これは論理的なステップではありません。なぜなら、ビジネスごとのビジネスごとのビジネスは完全に異なるためです(一般的なものだけがユーザーID、説明、発言です)。おそらくコンポーネント?しかし、テーブル名を除いて、基本クラスやあらゆる種類のリンクなしでプロパティを3つの異なるクラスにマッピングする方法は?

皆さんが私が書いたものを理解してくれたことを願っています。私はまだ本当のコードを持っていません、私はこのコードの処理方法について紙にいくつかのものをスケッチしていました。

私の道で私を助けることができる人は誰ですか?

よろしく、テッド

役に立ちましたか?

解決

インターフェイスを3つのエンティティに配置し、すべて同じテーブルに基本クラスとしてマッピングできます。

interface IWhatever 
{
  // central Id for the whole table
  int Id { get; set; }
  // may be some more properties
}

class Product : IWhatever
{
  // ...
}

class HourlyRate : IWhatever
{
  // ...
}

class TextLines : IWhatever
{
  // ...
}

マッピング:

<class name="IWhatever" table="MyBigTable">

  <id .../>
  <discriminator column="Type"/>
  <subclass name="Product" discriminator-value="P">
    <!-- ... -->
  </subclass>
  <subclass name="HourlyRate" discriminator-value="HR">
    <!-- ... -->
  </subclass>
  <subclass name="TextLines" discriminator-value="TL">
    <!-- ... -->
  </subclass>
</class>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top