我感兴趣是否打开实体框架DbContext
现有 ADO.NET 中的连接SqlConnection
如果它们都使用相同的连接字符串,即在完全相同的数据库上操作,那么应该不鼓励吗?
例如:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(0, 30, 0)))
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
DoStuffWithEF(connectionString);
...
}
}
void DoStuffWithEF(string connectionString)
{
using (var context = new MyCodeFirstDbContext(connectionString))
{
// basic LINQ queries ...
}
}
- 假定连接在这两种情况下都被重用
连接字符串在两者中引用相同的 SQL Server 2012 数据库
案例?
- 此类操作是否存在需要 MSDTC 的危险?
连接字符串是not连接。您永远不会将实际连接传递给上下文,因此它必须创建一个新连接。因此,事务将升级为分布式事务以覆盖两个连接。
您需要将实际的连接对象传递到上下文,使用适当的构造函数。在这种情况下,将只有一个本地事务,无需将其升级为分布式事务。
在 EF6+ 中,您可以只需传递连接对象。将您的方法更改为:
void DoStuffWithEF(SqlConnection connection)
{
using(var context=new MyCodeFirstDbContext(connection,false)
{
// ...
}
}
在以前的版本中,您无法通过开放连接,这需要一些不愉快的体操,如上所述here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)