gpt4 book ai didi

c# - 同时使用 Entity Framework 和 SqlConnection?

转载 作者:行者123 更新时间:2023-11-30 17:46:36 29 4
gpt4 key购买 nike

背景

我正在处理一个包含遗留代码和 Entity Framework 代码的项目。我被建议使用特定的数据服务方法来操作数据库中的记录。记录是通过 Entity Framework 检索的,我将 PK 传递到数据服务函数中以执行操作。

成功与失败的前提条件

如果网络正常运行,两个数据库调用(实体和 SQL)都会成功。 如果网络出现故障,然后恢复正常并执行此代码,它将使用 Entity Framework 检索锁定的记录,但随后失败并返回 SqlException。下面。

这让我开始思考,这里发生了什么可能会导致 SqlConnection失败,尽管 EF 能够建立连接。

代码示例

代码示例如下:

public void HandleNetworkBecomesAvailable() {
_entityFrameworkDataService.ReleaseRecords();
}

EntityFrameworkDataService.cs

    public void ReleaseRecords()
{
using (var context = new Entities()) // using EntityConnection
{
var records = context.Records.Where(
record => record.IsLocked).ToList();

foreach (var record in records)
{
_sqlConnectionDataService.UnlockRecord(record.ID);
}
}
}

SqlConnectionDataService.cs

    public void UnlockRecord(int recordId)
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Sqlconnection"].ConnectionString))
{
connection.Open();

using (var command = connection.CreateCommand())
{
command.CommandText = @"UPDATE [Records] SET [IsLocked] = 0";
//etc

command.ExecuteNonQuery();
}
}
}

应用程序配置

<add name="EntityConnection" connectionString="metadata=res://*/FooDatabase.csdl|res://*/FooDatabase.ssdl|res://*/FooDatabase.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=RemoteServer;initial catalog=FooDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="SqlConnection" connectionString="Server=RemoteServer;Database=FooDatabase;Trusted_Connection=True" />

现在,在与我的同事讨论之后,我最终将逻辑移到了 Entity Framework 数据服务中并在那里完成了工作。但我仍然不太清楚为什么连接一直失败。

编辑:实际错误是:

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Inner Exception:

The network path was not found

但是 Entity Framework 使用相同的网络路径,如 App.config 中的两个连接字符串所示。

最佳答案

您能否从 Entity Framework 的新弹性中受益,它会透明地重试?如果错误是间歇性的,您甚至不知道它已重试,而 ADO.net 会在它失败后立即让您知道它失败了。只是检查...

关于c# - 同时使用 Entity Framework 和 SqlConnection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999550/

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