背景
我正在處理一個包含遺留代碼和實體框架代碼的項目。我被建議使用特定的數據服務方法來處理來自數據庫的記錄。記錄是通過實體框架檢索的,我將PK傳遞到dataservice函數中執行操作。使用實體框架和SqlConnection?
前提對成功和失敗
如果網絡是高達,既DB調用(實體SQL)會成功。 如果網絡出現故障,然後回來並執行此代碼,那麼它將檢索帶有實體框架的鎖定記錄,但隨後失敗,並顯示下面的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();
}
}
}
的App.config
<add name="EntityConnection" connectionString="metadata=res://*/FooDatabase.csdl|res://*/FooDatabase.ssdl|res://*/FooDatabase.msl;provider=System.Data.SqlClient;provider connection string="data source=RemoteServer;initial catalog=FooDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="SqlConnection" connectionString="Server=RemoteServer;Database=FooDatabase;Trusted_Connection=True" />
現在,在與我的同事討論後,我最終將邏輯轉移到實體框架dataservice中,並在那裏進行工作。但是我仍然不確定爲什麼連接失敗。
編輯:實際的錯誤是:
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
但實體框架是使用相同的網絡路徑,可以在App.config兩個連接字符串中可以看出。
什麼是異常的實際消息文本?有沒有內在的例外? – 2014-09-23 16:04:33
看來服務器無法聯繫到,您確定使用的連接字符串是否正常? – pollirrata 2014-09-23 16:12:01
這個異常基本上說它不能使用你提供的連接字符串連接到sql server。如果你斷斷續續地發現它代表網絡問題,而不是代碼中的任何東西。如果你一致地得到它,那麼你使用的連接字符串是錯誤的。 – 2014-09-23 16:13:14