3

PeopleというデータベーステーブルとエンティティPeopleがあるとします。アプリケーションのどこにでも表示されないように、サブセットの人々を削除する簡単な方法が必要だとしましょう。そこで、IsDeleted列をPeopleテーブルに追加し、その列の値を1に設定します。

Entity Frameworkには、IsDeleted列の値が1に設定されているエンティティのインスタンスをフェッチしないように指定するメカニズムがあり、マッピングフレームワークはデータを自動的にフィルタリングします。NHibernateで達成することは可能ですか?

4

3 に答える 3

7

クラスマッピングwhereで属性を定義できます。

where(オプション)このクラスのオブジェクトを取得するときに使用する任意のSQLWHERE条件を指定します

<class ... where="IsDeleted = 0">

Fluent NHibernateを使用している場合は、マッピングクラスでこれを定義するだけです。

Where("IsDeleted = 0");

コードによるNHのマッピングは、FluentNHibernateのマッピングと同様である必要があります。

于 2012-06-05T21:36:19.377 に答える
0

PeopleBaseたとえば、クラスの派生元となる抽象クラスを作成しPeople、エンティティをそれにマップできます。
その後、次のようなディスクリミネーターを使用できます(正確性はチェックしませんでしたが、機能するはずです)。

 <class name="YourNamespace.PeopleBase,YourNamespace" table="People">
   // ...
   <discriminator column="IsDeleted" type="boolean" /> 
   // Properties...
   // ...
   <subclass name="YourNamespace.People, YourNamespace" discriminator-value="false">
   </subclass>
</class>
于 2012-06-05T15:02:49.590 に答える
0

私が望んでいたことを達成するために、私は基本クラス+2つのサブクラスを作成しました。構成は次のとおりです。

  • 弁別値を持つサブクラス:

    <subclass name="People" discriminator-value="null">
    </subclass>
    <subclass name="PeopleHistory" discriminator-value="not null">
        <property name="MasterRowId" />
    </subclass>
    
  • 基本クラスの弁別器:

    <discriminator column="MasterRowId" />
    
于 2012-06-14T13:16:51.433 に答える