1

同じドメインを 2 つの場所で同時に実行し続ける必要があります。一方の端は「オフライン」で実行できる必要がありますが、「オンライン」のときは時々データを送受信する必要があります。基本的に、クライアントからのデータを集約し、更新されたデータ (製品の最新価格、新製品など) を提供する中央サーバーを取得しました。永続性を確保するために NHibernate を使用しています。

ReplicateNHibernate のメソッドを使用しようとしています

session.Replicate(detached, ReplicationMode.LatestVersion);

反対側から来るオブジェクトを取得し、「ローカル」データベースに組み込み/マージ/アタッチします。

参照とコレクションをカスケードできないため、実行に失敗します。FluentNHibernate のカスケード オプションを確認して (さらに NHibernate ソース コードを直接見ても)、REPLICATE カスケード タイプが見つかりませんでした。Hibernate のドキュメントから: CascadeType.REPLICATE

私の質問は、FluentNHibernate にそのようなオプションがない理由を知っている人はいますか? この種のカスケード動作を設定する別の/より良い方法はありますか?

Cascade.Merge()このオプションを と一緒に試してみましsession.Merge(detached)たが、カスケードは問題なく動作しますが、主に ID 生成と楽観的ロック (バージョン管理) が原因で頭痛の種になります。

編集: NHibernate のソース コードReplicateCascadeStyleには、文字列 "replicate" にマップされるクラスがあります。Cascade/CascadeConverterクラス (Mapping.ByCode 名前空間から) には、オプションとして複製がありません。そのため、NHibernate 自体は Replicate でのカスケードをサポートしていますが、手動マッピングのみを使用していると思います。

4

1 に答える 1

2

OK、Fluent NHibernate を使用して約 100 以上のクラスをマップしているため、xml マッピングに切り替えることはできません。そこで、GitHub で Fluent NHibernate をフォークし、欠落していた Cascade.Replicate オプションを追加して、pull requestを送信しました。

それが誰かを助けることを願っています。

于 2013-10-17T21:25:14.377 に答える