我在使用流畅的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);
}
答案 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);
将不执行任何操作,并且当它是新实体时立即发出插入