什么是数据库对象的工作单元?

时间:2009-09-25 21:10:27

标签: database database-design unit-of-work

用外行人的话来说,关于数据库对象的工作单元是什么?我正在研究如何将数据库表转换为C#类,我经常遇到这个术语,但每个人似乎都在描述它,好像你应该已经知道它是什么。

3 个答案:

答案 0 :(得分:6)

我在这里引用Martin Fowler,因为我认为他的意思是我见过的最清晰,最易理解的意思之一:

  

工作单元会跟踪您在业务事务中可能影响数据库的所有操作。完成后,它会计算出因工作原因需要更改数据库的所有内容。

答案 1 :(得分:2)

基本上它意味着完成原子动作所需的工作,例如在两个支票账户之间转账。

示例(伪代码)

Procedure TransferBetweenAccounts(Amount, Account source, Account target)
   Begin Transaction
      Debit source account By (Amount)   }----Unit of
      Credit target account By (amount)  }----Work 
   End Transaction

   If Transaction Failed
       Roll Back

一篇很好的MSDN文章描述了工作单元和持久性无知http://msdn.microsoft.com/en-us/magazine/dd882510.aspx

答案 2 :(得分:0)

在LINQ to SQL中,工作单元定义为(http://msdn.microsoft.com/en-us/library/bb546187.aspx):

  

数据上下文的实例应该   拥有一个“工作单位”的一生。   在松散耦合的环境中,a   工作单位通常很小,   也许是一个乐观的交易,   包括一个电话   的SubmitChanges。因此,数据   上下文被创建并处置   方法范围。如果是工作单位   包括对业务规则的调用   逻辑,那么一般你会想要   为此保留DataContext实例   整个操作

了解工作单元对于LINQ to SQL的成功非常重要。看看这个页面(一个更新场景),关于工作单元模式如何适合LINQ to SQL:

http://aspalliance.com/1414_LINQ_to_SQL_Part_4__Updating_our_Database.3

Martin Fowler的“企业架构模式”一书有很多专门讨论该主题的内容(第184-194页)。他的简短定义是:

  

“维护受影响的对象列表   通过商业交易和   协调写作的变化   和并发的解决方案   问题。“