【问题标题】:NHibernate Session.Load or Session.GetNHibernate Session.Load 或 Session.Get
【发布时间】:2012-09-06 03:54:07
【问题描述】:

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

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

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

我想大致了解如何针对这个简单的场景进行更新。由于 Web 应用程序的架构已断开连接,是否可以忽略这种可能性并继续使用“加载”(或)使用“获取”访问数据库并检查空值并继续。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我的错,我想我想太多了。我完全忘记了引用集成。感谢您的回复。
    猜你喜欢
    • 2018-02-19
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多