我一直在四处寻找,找不到 NHibernate 的这个问题的好答案。
我正在使用一个使用 NHibernate 的 API。我正在进行数据传输,并且正在尝试使用他们的 User 对象来保存用户数据。
我创建对象
User objUser = new User();
他们有一个映射文件,指定将 ID 设置为身份
<id name="Id" column="UserId" type="int">
<generator class="native" />
</id>
但我的要求之一是将旧 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()
我收到一个错误:具有相同标识符值的不同对象已与会话关联