Lea*_*ner 6 c# transactions business-logic transactionscope
我将使用3层架构构建服务,我真的很担心如何以事务处理方式处理操作.
我知道我有两个选择:IDbTransaction而且TransactionScope......但我并没有真正决定去哪一个,尽管我做了很多研究.
我会选择TransactionScope,但我不想涉及DTC ...而且我需要支持SQLServer2005和Oracle.(我知道我需要一次只打开一个连接)
我希望看到两种情况下使用它们的良好示例/模式...良好的链接可以做得很好.
类似于BL类和DAL类的样子......以及如何在它们之间创建和传递事务/连接.
Edit1: 我正在寻找一些这方面的实现(但对于这两个选项):
using(var scope = new TransactionScope())
{
// transactional methods
datalayer.InsertFoo();
datalayer.InsertBar();
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
编辑2:
由于丹尼斯为我提供了一个非常好的选择...我还在等待有人向我展示一个模型的好例子,它使用' TransactionScope' 在业务层和数据层之间进行交互
谢谢.
Den*_*dic 11
我目前在这种情况下使用的是多个存储库和多个UnitOfWork方法.假设您有CustomerRepository和InvoiceRepository.如果你需要这样做:
customerRepository.Add(customer);
invoiceRepository.Add(bill);
Run Code Online (Sandbox Code Playgroud)
并将这两个作为一个事务,然后我做的是创建存储库我给他们相同的UnitOfWork,如:
IUnitOfWork uow = UnitOfWork.Start();
ICustomerRepository customerRepository = new CustomerRepository(uow);
IInvoiceRepository invoiceRepository = new InvoiceRepository(uow);
Run Code Online (Sandbox Code Playgroud)
所以上面的陈述现在是:
customerRepository.Add(customer);
invoiceRepository.Add(bill);
uow.Commit();
Run Code Online (Sandbox Code Playgroud)
所有的魔力都在下面,取决于你用作数据技术的东西(ORM就像NHibernate,或者可能是原始的ADO.NET--在大多数情况下不建议这样做).
有关存储库模式和UnitOfWorks的一个很好的例子,请阅读本教程,但请注意,在其中您不能激活多个UnitOfWorks(实际上很少有应用程序需要它,因此没有真正的问题).此外,本教程使用NHibernate,所以如果您不熟悉ORM概念,我建议您加入它(如果您的时间表允许).
还有一件事:你在这里也有更高级的模式,比如每次会话的会话等等,但这是高级的东西,我现在正在把头包裹起来,如果你想看看uNhAddIns项目(对于NHibernate也是如此) )
| 归档时间: |
|
| 查看次数: |
4044 次 |
| 最近记录: |