0

Account通常の状況では、NHibernate によって生成された Guid ID を持つエンティティがあります。Accountただし、 「ハードコード」したい IDがいくつかあります。これは、どこでも参照され、非常に特殊な機能を提供するアカウントです。

これらのオブジェクトを構成ファイルで定義し、事前に構成された Guid ID を使用して、アプリケーションを起動するときに、これらのアカウントがデータベースに存在するかどうかを確認したいと考えています。そうでない場合は、そのまま追加したいと思います。それらが存在する場合は、データベースのバージョンを上書きし、構成ファイルから設定されたプロパティを保持したいと考えています。

これが目的のようISession.Mergeですが、オブジェクトは永続化されていません。それから私は自分自身に考えましたISession.PersistISession.SaveOrUpdate同様に、オブジェクトを保持しません。

NHibernate でこれらのいくつかの「プレハブ」オブジェクトを永続化するには、どうすればよいですか?

4

3 に答える 3

0

これらの事前定義された Guid を文字列定数に入れます。文字列定数から Guid インスタンスを作成できます。アプリの起動時に、これらの GUID を持つオブジェクトの DB をクエリします。見つかった場合は、オブジェクトを更新し、DB で更新を行います。見つからない場合は、定義済みの GUID を使用してオブジェクト インスタンスを作成し、挿入を行います。

つまり、これらの「プレハブ」オブジェクトには特別なことは何もありません。事前定義された ID を持たない他のオブジェクトと同様に、それらを通常のオブジェクトとして扱います。

更新: それほど単純ではありません。NHibernate はおそらく ID に新しい Guid を入力しようとしますが、問題は、NHibernate に自分でこれをやりたい場合があることを伝える方法です。

Session.Merge は最初に Db からエンティティをロードしようとし、見つかった場合はメモリ内インスタンスを from-db インスタンスとマージします。それ以外の場合は、新しいインスタンスを DB に追加します。

ADO.NET を使用して手動で NH を完全にスキップして、この事前定義されたエンティティをいつでも直接追加できますが、これはあまり良い解決策ではありません。

于 2013-03-25T00:00:48.493 に答える
0

マッピングで NH が ID を生成することが示されている場合、NH を使用して特定の ID を挿入することはできません。

アドホック SqlQuery を使用するか、assignedID を持つ初期化用に部分的に変更されたマッピング構成を作成します。

于 2013-03-25T14:44:51.317 に答える