0

我坚持使用流利的 nhibernate 处理 NonUniqueObjectException 异常。我有一个循环处理一些业务逻辑,检查数据库中一些数据的存在。如果数据不是数据库,则应添加。但是这个周期内的所有操作都是在同一个事务中进行的。这是循环体的样子:

 // Open session, start transaction
 if(!_service.CheckIfEntityInDb(entity))
 {
   entity = new entity() {var1 = value1, var2 = value2};
   _service.SaveOrUpdate(entity);
 }

我已经尝试过使用merge,但合并返回我的实体与空字段。该实体是一种映射,仅包含其他实体类型的两个属性。请给出解决这个问题的一些建议,除了在周期的每一步都提交数据。谢谢。

更新

public bool CheckIfEntityInDb(entity)
{
  Session.QueryOver<Entity>.Where(x => x.Id == entity.Id).Future().FirstOrDefault();
}

public bool CheckIfEntityInDb(entity)
{
  Session.SaveOrUpdate(entity);
}
4

1 回答 1

1

假设您自己生成 id

var entity = session.Get<Entity>(someid); // this uses the firstlevel cache

if (entity == null)
{
    entity = new Entity { Id = someid, var1 = value1, var2 = value2 };
    session.Save(entity);
}

身份生成后更新:

因为您使用身份,所以会话知道哪个 id 被保存,哪个不被保存。session.SaveOrUpdate(entity);如果实体是已知的,则什么也不做,当它是新实体时立即发出插入

于 2012-05-29T11:20:03.940 回答