我有使用城堡windsor作为DI和拦截器的asp.net MVC应用程序。
目前Dapper用于ORM mappring,Dapper是实体映射提供程序的简单对象,它与ADO .Net连接,常见对象一起使用。
我们已经有了存储库和业务服务层,现在我想实现工作单元。
我知道EF具有自动事务功能,而SaveChanges()使所有实体更改持久化。
有没有办法让非EF,多层应用工作单位?
答案 0 :(得分: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的行为。在范围内,您应该只使用一个连接,然后在打开另一个连接之前关闭第一个连接。