我有 asp.net MVC 应用程序与城堡温莎作为 DI 和拦截器工作。
目前 Dapper 用于 ORM 映射,Dapper 是一个简单的对象到实体映射提供程序,它与 ADO .Net 连接、通用对象一起使用。
我们已经有了存储库和业务服务层,现在我想实现工作单元。
我知道 EF 具有自动事务功能,并且 SaveChanges() 使所有实体更改持久化。
有没有办法让非 EF 多层应用程序的工作单元?
我有 asp.net MVC 应用程序与城堡温莎作为 DI 和拦截器工作。
目前 Dapper 用于 ORM 映射,Dapper 是一个简单的对象到实体映射提供程序,它与 ADO .Net 连接、通用对象一起使用。
我们已经有了存储库和业务服务层,现在我想实现工作单元。
我知道 EF 具有自动事务功能,并且 SaveChanges() 使所有实体更改持久化。
有没有办法让非 EF 多层应用程序的工作单元?
我认为您正在寻找某种 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 的行为。您应该在示波器期间仅使用一个连接,或者在打开另一个连接之前关闭第一个连接。