4

我有 asp.net MVC 应用程序与城堡温莎作为 DI 和拦截器工作。

目前 Dapper 用于 ORM 映射,Dapper 是一个简单的对象到实体映射提供程序,它与 ADO .Net 连接、通用对象一起使用。

我们已经有了存储库和业务服务层,现在我想实现工作单元。

我知道 EF 具有自动事务功能,并且 SaveChanges() 使所有实体更改持久化。

有没有办法让非 EF 多层应用程序的工作单元?

4

1 回答 1

1

我认为您正在寻找某种 AOP。看看这个例子http://www.sharpcrafters.com/solutions/transaction。您可以使用该属性将您的方法与事务包装在一起,或者更好的是,您可以声明它将用于 BAL 中的所有方法,如下所示:

[assembly: TransactionScope( AttributeTargetTypes = "MyBALNamespace.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Public )]

如此处所述:http: //www.sharpcrafters.com/solutions/logging

更新

使用时TransactionScope,尽量避免不必要地将事务升级到 MSDTC。如果您在此期间打开了两个连接(甚至是同一个数据库),TransactionScope它将立即升级为 DTC,这会对性能产生影响(有时它会导致作用域处置出现不需要的异常)——这是 SQLServer2008 的行为。您应该在示波器期间仅使用一个连接,或者在打开另一个连接之前关闭第一个连接。

于 2012-11-14T12:24:27.550 回答