NHibernate:在达到唯一约束时保存停止

时间:2010-11-26 07:25:07

标签: c# nhibernate

我想使用NHibernate将商店列表保存到数据库中。但是,每个商店都有一个唯一约束,导致存储触发约束时保存停止。

try
{
    _storeRepository.Save(stores);
}
catch (Exception e)
{
}
finally
{
    session.Commit();
}

根据上面的代码,命中唯一约束之前的所有商店都会保存,但不会保存。如何在不必循环整个列表并检查重复项的情况下解决这个问题?

2 个答案:

答案 0 :(得分:1)

规则是:

  • 从不捕获事务中的sql(或NH)异常。
  • 如果出现错误,始终回滚到整个内容
  • 如果出现错误,总是销毁会话。

NH会话缓存不同步,您不能再使用它了。所以“终于承诺”是一件非常糟糕的事情。

您需要确保不违反业务逻辑中的任何数据库约束。

答案 1 :(得分:0)

您可以随时使用SaveOrUpdate,以便NHibernate更新实体,如果在数据库中找到了具有给定实体的实体。