在一个事务期间流畅的Nhibernate NonUniqueObjectException

时间:2012-05-28 14:04:10

标签: exception transactions fluent-nhibernate unique

我在使用流畅的nhibernate时遇到了NonUniqueObjectException异常。  我有一个循环使用一些业务逻辑,在数据库中存在一些数据。如果数据不是DB,则应添加。但是这个周期内的所有操作都是在同一个事务中完成的。  这就是循环体的样子:

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

我已经尝试使用merge,但合并返回我的实体与空的fiels。此实体是一种映射,仅包含其他实体类型的两个属性。 除了在每个循环步骤中提交数据之外,请给出一些解决此问题的建议。 感谢。

更新

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

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

1 个答案:

答案 0 :(得分: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);将不执行任何操作,并且当它是新实体时立即发出插入