NHibernate Session.Load或Session.Get

时间:2012-09-06 03:54:08

标签: asp.net asp.net-mvc nhibernate ado.net fluent-nhibernate

我对Session.Load和Session.Get有所了解,但想知道它的实时实现。假设公司和位置表具有n:1关系。在公司编辑页面中,用户选择一个位置并提交页面。通过使用下面的代码,它可以在不触及db的情况下附加。

cust.Location =  session.Load<Location>(selectedlocationid)

但同时,如果其他用户在此期间删除了该位置,则可能会发生异常。这种情况甚至可能发生在ADO.NET / Entity框架中,因为我们只是在不检查存在的情况下更新id。

我想知道如何更新这个简单的场景。由于Web应用程序已经断开了体系结构,可以忽略这种可能性并继续使用“加载”(或)使用“获取”命中数据库并检查空值并继续。

1 个答案:

答案 0 :(得分:0)

在删除之前无法锁定行,因为在查看要删除的行和实际删除行之间可能会有很多延迟。
不锁定行是optimistic concurrency

在数据库级别实现foreign key关系,以便它不允许与已删除的行相关联。这样,如果有人删除了行,您的代码就会引发异常。

您可以捕获该异常并相应地提醒用户。

相关问题