[英]Entity Framework 6.0 Data reader with threading
我在Entity Framework 6.0中使用了存儲庫模式。 下面是用於從數據庫中檢索多個數據結果集的代碼,為此,我們使用了數據讀取器。
public InquiryResponse GetInquiry(long ID)
{
// Create container ready for the resultsets
var result = new InquiryResponse();
// Create command from the context in order to execute
var command = tDataContext.Database.Connection.CreateCommand();
command.CommandText = "[dbo].[GetInquiryByID] @Id";
command.Parameters.Add(new SqlParameter("@Id", ID));
try
{
// Open connections
if (tDataContext.Database.Connection.State != System.Data.ConnectionState.Open)
{
// Open connections
tDataContext.Database.Connection.Open();
}
var reader = command.ExecuteReader();
// the `Translate` method
var objectContext = ((IObjectContextAdapter)tDataContext).ObjectContext;
// Read Entity1 from the first resultset
result = objectContext.Translate<InquiryResponse>(reader).FirstOrDefault();
if (result != null)
{
// Read Entity2 from the second resultset
reader.NextResult();
result.InquiryDetail = objectContext.Translate<InquiryDetail >(reader).ToList();
}
if (result != null && result.ID <= 0)
{
result = null;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
// Close connections
tDataContext.Database.Connection.Close();
}
return result;
}
我們在多個線程中調用此函數,有時在生產環境中會收到不同的錯誤,請從下面查看錯誤詳細信息。
當閱讀器關閉時,無效嘗試調用FieldCount
已經有一個與此命令相關聯的打開的DataReader,必須先關閉它。
ExecuteReader需要一個開放且可用的連接。 連接的當前狀態為打開。
我確實找到了解決上述問題的適當解決方案,感謝您為獲得適當解決方案所提供的幫助。
讓我知道是否缺少任何內容,因此我將添加相同的內容。
謝謝,
簡而言之,這是一個非常簡單的設計,注定會失敗。
Context
或Connection
Context
或Connection
using
語句打開Context
或Connection
Context
或Connection
盡可能自動地喚醒 此外,如果讓EF負責連接和池化並使用using
語句,您會發現事情將正常進行。 只有在EF不引發異常之后,我們才能討論提高性能的體系結構
額外資源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.