我一直在尋找所有,並找不到NHibernate的這個問題很好的答案。NHibernate身份插入
我正在使用一個使用NHibernate的API。我正在做一個數據傳輸,我試圖使用他們的用戶對象來保存用戶數據。
我創建對象
User objUser = new User();
他們有一個映射文件,指定的ID設置爲身份
<id name="Id" column="UserId" type="int">
<generator class="native" />
</id>
但我的要求之一是舊的標識保存到用戶表。我需要能夠臨時將身份插入設置爲ON並保存記錄,但仍然可以使用User對象來保存關聯的數據。
我試圖再次做這樣的事情
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()
我得到一個錯誤:用同樣的標識值不同的對象是已經與會話相關聯
這看起來像身份種子小於當前身份的情況。即下一個Id的種子爲0,但是您已經插入1而不是將種子設置爲1。 – Phill 2013-04-22 09:02:52