流畅的nHibernate:不存在具有给定标识符的行。 2个用户删除某个项目时发生错误

时间:2011-04-07 12:20:14

标签: c#-4.0 fluent-nhibernate

Fluent nHibernate:不存在具有给定标识符的行。

我有一个Object,它有一个Items集合。 我的问题是:当2个用户看到对象而一个用户删除某个项目时发生错误。 另一个用户应该看到对象已更新,没有已删除的项目,而不是异常。

我试过了:

session.Evict(p);
// the following line will throw an exception 
session.Refresh(p);

No row with the given identifier exists[Sistema.ERPxx.Pedidos.ItemPedido#74435]

在映射中指定:

this.HasMany<ItemPedido>(v => v.Items).KeyColumn("numero_pedido").Cascade.All().OrderBy("descricao_produto").LazyLoad().NotFound.Ignore();

我遇到此问题,并且不知道如何刷新项目以获取其他用户所做的更新。

如何使用Items刷新对象而不会出现异常?

1 个答案:

答案 0 :(得分:2)

实际上你得到这个例外是件好事。这就是所谓的乐观并发(google it; here是一个简单的解释) 您需要做的是捕获该异常,并将其转换为用户可理解的格式。例如:

catch (WhateverConcurrencyException ex)
{
   throw new UserReadableException("The object with id "+id+" no longer exists");
}