gpt4 book ai didi

c# - 在现有 SqlConnection 中打开 DbContext 连接

转载 作者:行者123 更新时间:2023-12-03 02:59:39 27 4
gpt4 key购买 nike

我很感兴趣是否应该阻止在现有 ADO.NET SqlConnection 中打开 Entity Framework 的 DbContext 连接,前提是它们都使用相同的连接字符串,即在完全相同的数据库上操作?

例如:

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 ...
}
}
  1. 在这两种情况下连接是否被重用,因为连接字符串在两者中引用相同的 SQL Server 2012 数据库案例?
  2. 此类操作是否存在需要 MSDTC 的危险?

最佳答案

连接字符串不是连接。您永远不会将实际连接传递给上下文,因此它必须创建一个新连接。因此,事务将升级为分布式事务,以覆盖两个连接。

您需要使用 the appropriate constructor 将实际连接对象传递到上下文。在这种情况下,将只有一个本地事务,无需将其升级为分布式事务。

在 EF6+ 中,您可以 simply pass the connection object 。将您的方法更改为:

void DoStuffWithEF(SqlConnection connection)
{
using(var context=new MyCodeFirstDbContext(connection,false)
{
// ...
}
}

在以前的版本中,您无法通过开放连接,这需要一些不愉快的体操,如 here 所描述的

关于c# - 在现有 SqlConnection 中打开 DbContext 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26274976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com