同じドメインを 2 つの場所で同時に実行し続ける必要があります。一方の端は「オフライン」で実行できる必要がありますが、「オンライン」のときは時々データを送受信する必要があります。基本的に、クライアントからのデータを集約し、更新されたデータ (製品の最新価格、新製品など) を提供する中央サーバーを取得しました。永続性を確保するために NHibernate を使用しています。
Replicate
NHibernate のメソッドを使用しようとしています
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 でのカスケードをサポートしていますが、手動マッピングのみを使用していると思います。