私はずっと調べてきましたが、NHibernate に関するこの問題に対する良い答えを見つけることができません。
NHibernate を使用する API を使用しています。私はデータ転送を行っており、ユーザー オブジェクトを使用してユーザー データを保存しようとしています。
オブジェクトを作成します
User objUser = new User();
ID を ID に設定するように指定するマッピング ファイルがあります。
<id name="Id" column="UserId" type="int">
<generator class="native" />
</id>
しかし、私の要件の 1 つは、古い ID をユーザー テーブルに保存することです。ID 挿入を一時的にオンに設定してレコードを保存できるようにする必要がありますが、ユーザー オブジェクトを使用して関連データを保存できるようにする必要があります。
私はこのようなことをしてみました
using (ISession session = MyDatabaseFactory.SessionFactory.OpenSession())
{
using (ITransaction trans = session.BeginTransaction())
{
session.CreateSQLQuery("SET IDENTITY_INSERT Users ON").UniqueResult();
session.Save(objUser, objUser.Id);
session.Flush();
trans.Commit();
session.CreateSQLQuery("SET IDENTITY_INSERT Users OFF").UniqueResult();
session.Close();
objUser= session1.Merge(objUser);
}
}
しかし、後でこのようにユーザーオブジェクトを再度保存しようとすると
objUser.Passwords.Add("password1");
objUser.Save()
エラーが表示されます: 同じ識別子の値を持つ別のオブジェクトが既にセッションに関連付けられていました