Unit of Work模式是一种在上下文中跟踪域上所有操作并在完成可能复杂的逻辑时立即应用所有操作的方法。
当与 ORM(例如 NHibernate)一起使用时,使用用于底层数据库的每个操作的共享 ISession(或 Linq 2 Sql 中的 DataContext)来实现工作单元被认为是良好实践。
正确实现可能很棘手,尤其是在处理服务器应用程序(主要是 ASP.Net MVC 或 ASP.Net Webforms)时。
我已经涉足了 Rhino.Commons(面向 NHibernate)中的实现,并且我知道其他几个,但没有很好地掌握它们的优点和缺点。
最常用的是什么,以及如何将它们无缝集成到 ASP.Net MVC(或 WebForms,但我对 MVC 最感兴趣)中?
最佳答案
Update: I saw this (unit-of-work-pattern-in-net) after responding.
也许 System.Transactions.Transaction 就是您所追求的。
工作单元这个术语最初应用于多年前基于大型机的应用程序。这些应用程序将执行一系列步骤。如果任何一个步骤失败,数据库将回滚到前一个“同步点”。在成功完成工作单元中的所有步骤后,应用程序将记录新的同步点。这些步骤就像一个整体。
这个隐喻已经演变,因此在 .NET 中,我们有了一个 Transaction 构造。在事务范围内对可恢复数据存储执行的工作作为一个单元执行,具有 ACID 属性。这些数据存储的示例可能是:任何现代 RDBMS、MSMQ 等排队系统,或者 Windows 上的文件系统或注册表(通过 KTM)。当事务解决时,它会提交或回滚所有事务存储上的所有操作。
我不了解 nHibernate 或 ISession 构造。但如果您使用传统意义上的“工作单元”一词,那么我认为您想要的是事务。
至于将事务集成到 ASP.NET MVC - 不确定这意味着什么。事务不关心 UI 模型是什么,也不关心您如何设计 UI 流控制。如果您更新数据库(我认为是“模型”),那么您可以选择将该更新包含在事务中。仅当您有多个更新作为单个事务的一部分时才真正有意义。另一方面,您不希望交易长时间保持开放状态。数据库上的锁定将导致争用并导致吞吐量下降。
关于c# - 工作单元模式的 .net 引用实现有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945864/