我感兴趣的是,如果它们都使用相同的连接字符串,即在完全相同的数据库上运行,则不鼓励在现有ADO.NET DbContext
中打开实体框架的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 ...
}
}
答案 0 :(得分:4)
连接字符串不连接。您永远不会将实际连接传递给上下文,因此必须创建一个新连接。因此,事务将升级到分布式事务,以便覆盖两个连接。
您需要使用the appropriate constructor将实际连接对象传递给上下文。在这种情况下,只有一个本地事务,不需要将其升级为分布式事务。
在EF6 +中你可以simply pass the connection object。将您的方法更改为:
void DoStuffWithEF(SqlConnection connection)
{
using(var context=new MyCodeFirstDbContext(connection,false)
{
// ...
}
}
在之前的版本中,您无法传递需要一些令人不快的体操的开放式连接,如here所述