0

流暢な nhibernate で継承戦略を開発しています。すべて正常に動作しますが、1 つ質問があります。サブクラスによる基本プロパティの更新を無効にする可能性はありますか?

ダミーコードは次のとおりです。

public class ObjectA
{
    public virtual string StatusA { get; set; }
}

public class ObjectB : ObjectA
{
    public virtual string StatusB { get; set; }
}

public class ObjectBMap : SubclassMap<ObjectB>
{
    public ObjectBMap()
    {
        Map(x => x.StatusB);
    }
}

objectB を更新しているときに、StatusA を更新したくありません。ObjectA を更新するときにステータス A を変更したいと考えています。nhibernate にはこの種の機能がありますか? 意味はありますか?

編集: 追加 の説明 私がそのようなことをしたい理由は、私のシステム (asp mvc アプリケーション) には、objectsA と objectsB を管理する 2 つの異なる場所があるためです。最初にオブジェクト A を作成し、後でオブジェクト A をオブジェクト B に「変換」します。次に、これら 2 つのオブジェクトを 2 つの異なるモジュールで編集できます。

objectB を編集するための私のフロー: -db から objectB を読み取り、viewmodel に変換します。 -ビューからフォームを投稿し、ビュー データをフォームから objectB に変換し、db で更新します。

オブジェクトAからのデータのオブジェクトBのビューモデルを拡張し、このデータをいくつかの非表示フィールドに保存して、ビューモデルから変換したくありません。

このデータを Session.SaveorUpdate(objectB) で更新できないことをマークできれば、問題は解決すると思いました。つまり、基本的にそれが私の質問でした。

4

1 に答える 1

1

ドキュメントを確認してみてください:

小引用:

<class
    name="ClassName"                              (1)
    table="tableName"                             (2)
    ...
    dynamic-update="true|false"                   (7)
    dynamic-insert="true|false"                   (8)
    ...

...
(7) dynamic-update(オプション、デフォルトは false): UPDATE SQL が実行時に生成され、値が変更された列のみが含まれるように指定します。
(8) dynamic-insert(オプション、デフォルトは false): INSERT SQL が実行時に生成され、値が null でない列のみが含まれるように指定します。

私たちが見ることができるのは設定"dynamic-update"です...これは私たちが期待することを行います:変更されたプロパティのみを更新します

これは、ObjectA で定義されたプロパティに変更がない場合にのみ、ObjectB にのみ更新を発行するように NHibernate を学習する最もネイティブな方法です。

しかし、一般的には、NHibernate のままにしておくだけです。それが何をするかは、私たちが必要とする最高のものである可能性が最も高いです...それは成熟したツールです

拡張する

質問の拡張に基づいて-私は言うでしょう:そのように行かないでください... しないでください

ORM ツールを使用すると、ビジネス ドメイン モデルであるモデルをできる限り簡単に保つことができれば、多くのメリットが得られます。NHibernate は多くのことを助けることができます。

  • すべてまたは一部のプロパティのみの選択 - プロジェクションと呼ばれる
  • ページング
  • 並べ替え
  • フィルタリング
  • WRITE操作のカスケード
  • そしてさらに...

ただし、「予期しない」または「例外的な」ドメイン モデルの設計を管理するのには役立ちません。

これを読んで下さい:

オブジェクト指向プログラミングにおける継承に対する構成 (または複合再利用の原則)は、クラスが、継承ではなく目的の機能を実装する他のクラスを含めることによって、ポリモーフィックな動作とコードの再利用を実現できる手法です...

于 2014-08-13T17:24:05.970 に答える