使用DI和不使用EF实现工作单元

时间:2012-11-14 08:00:51

标签: asp.net-mvc ado.net castle-windsor unit-of-work

我有使用城堡windsor作为DI和拦截器的asp.net MVC应用程序。

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

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

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

有没有办法让非EF,多层应用工作单位?

1 个答案:

答案 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的行为。在范围内,您应该只使用一个连接,然后在打开另一个连接之前关闭第一个连接。