gpt4 book ai didi

.net - EntityConnection 和打开的 SqlConnection

转载 作者:行者123 更新时间:2023-12-05 01:31:13 24 4
gpt4 key购买 nike

我有一个关于 EntityFramework with CodeFirst 方法的问题。基于 EntityConnection 源代码和文档,我无法使用已打开的 SqlConnection 创建它。它要求应该关闭。
我们有一些不同的 DB 数据层(nHibernate 等),如果我们可以在它们之间重用相同的 SqlConnection,那就太好了。但似乎 EntityFramework 不允许这样做。我可以将关闭的 SqlConnection 传递给 DbContext,但是关闭每个 DbContext 的连接对我来说并不好。

有没有办法重用打开的sql连接?

编辑

在 EF 转到 OpenSource 之后,我能够对其进行更新。我改变的唯一一行是在 System.Data.Entity.Core.EntityClient.EntityConnection 类的构造函数中。

if (connection.State != ConnectionState.Closed)
{
//throw new ArgumentException(Strings.EntityClient_ConnectionMustBeClosed);
}

在我评论 throw 异常之后,我可以重用现有的打开的 SQL 连接,并且在 DBContext 使用它之后,它不会关闭它,它仍然可用于其他东西。

我的示例代码:
var connection = new SqlConnection(connectionString);
connection.Open();

MetadataWorkspace workspace = GetWorkspace(connection); // I loaded it from the same context, and save it in memory.

EntityConnection eConnection = new EntityConnection(workspace, connection);

using(var context = new EFContext(connection, false))
{
var someData = context.SomeTable.ToList();
}

connection.Close();

最佳答案

当前不支持将打开的连接传递给上下文,因为上下文内部始终使用 EntityConnection 如果您检查文档,您将看到传递的商店连接必须处于关闭状态。

解决方法可以是在使用其他数据访问技术之前创建上下文并显式打开连接

objectContext.Connection.Open();

现在您应该可以重用 SqlConnection在上下文的范围内:
var dbConnection = ((EntityConnection)objectContext.Connection).StoreConnection;

如果您正在使用 DbContext API,我建议您阅读 this article有关如何使用 DbContext 解决问题的更多详细信息.

关于.net - EntityConnection 和打开的 SqlConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773360/

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