2009-06-08 5 views
6

切断されたシナリオに関する最新バージョンのNHibernate(2.0.1 GA)でのあなたの経験は何ですか?切断されたシナリオでのNHibernate

シナリオでは、NHibernateからいくつかのオブジェクトグラフを取得し、セッション(およびデータベース接続)から切断し、オブジェクトグラフの変更(コレクションの削除、エンティティの追加、エンティティの更新)を行い、再接続して保存します....

+0

、あなたはおそらく、より具体的にする必要がありすぎて –

+0

:ここ

はあなたの詳細を与える記事です。どのような経験、どのような「切断シナリオ」? –

+0

なぜですか?私はシナリオを既に投稿していると思います。非常に具体的なシナリオを尋ねると、回答の量は一般的なものより少なくなる可能性があります。 –

答えて

4

これをクライアント - サーバーアーキテクチャで試しました。今私たちはDTO(データ転送オブジェクト)に移行しています。つまり、分離されたエンティティはクライアントに直接送信されるのではなく、特殊なオブジェクトになります。

この方向に移動する主な理由は、NHibernateではなく、実際にはエンティティをクライアントに送信するために必要なシリアライゼーションです。セッションにアタッチしている間に遅延ロードを使用することができますが、あなたはそれをシリアル化するためにデータベースからすべての参照を取得する必要があります。

参照の代わりにたくさんのGuidsがあり、マッピングされていてもシリアル化されていない多くのプロパティがありました。したがって、実際にシリアル化したいものを独自の構造体にコピーする方がはるかに簡単です。

それ以外にも、作業分離がうまくいく可能性があります。

  • 遅延ロードに注意してください。デタッチされたインスタンス上のロードされていないオブジェクトにアクセスすると例外がスローされます。
  • デタッチされた場所が高いうちにエンティティが変更された可能性のある並行性に注意してください。
  • 何らかのセキュリティが必要な場合や、サーバーの情報を変更してもデータを変更したい場合でも注意してください。切り離されたオブジェクトは、任意の状態で潜在的に戻る可能性があります。
+0

例:LLBLGenProを見ると、コードを生成する前に、使用するテンプレートを決めることができます。一方は "self-servicing"と呼ばれるアクティブなレコードパターンを使用し、もう一方はADO.NET DataAdapterのようなアダプタを使用します。最後のシナリオは、接続されていないシナリオ(リモーティングまたはWebサービス)がある場合に便利です。 –

+2

@パトリック:私はあなたが話していることの手がかりを持っていないことを認めなければならない。 –

+0

セルフサービステンプレートLLBLGenProでは、プロパティ(POCOスタイル)を取得および設定し、「保存」などのメソッドを呼び出すことができるクラス(またはそれ以上)を作成します。このオブジェクトは、状態管理とオブジェクトツリーのロードとSQ​​L作成に関する自己処理です。アダプタスタイルは、プロパティのみを持つ軽量クラスを生成し、直列化可能です。このオブジェクトは、すべての状態管理とSQLの作成などを実行している他のオブジェクトに渡すことができます。 –

4

あなたは、セッション・メソッドSaveOrUpdateCopyに見てみるとをマージすることがあります。私は骨董品を午前 NHibernate feature: SaveOrUpdateCopy & Merge

+0

URLが変更されたようです。今のところhttp://www.codinginstinct.com/2009/11/nhibernate-feature-saveorupdatecopy.html –

+0

ありがとう、私はURLを固定しました。 –

関連する問題