[英]NullReferenceException in EntityFramework, how come?
[英]EntityFramework throws NullReferenceException
我有一個使用EntityFramework的ASP.NET MVC服務。 該服務正常運行,幾乎所有對數據庫的查詢都是成功的。 但是,一天幾次對數據庫的查詢會拋出NullReferenceException。 這是堆棧跟蹤:
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
at System.Data.EntityClient.EntityConnection.Open()
at System.Data.Objects.ObjectContext.EnsureConnection()
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
at System.Linq.Queryable.Max[TSource](IQueryable`1 source)
...
Max()調用是由我們自己的代碼完成的。
我們沒有用於創建數據庫連接的特殊代碼,除了從DbContext派生的類(用作單例):
public class MyContext : DbContext
{
/// Singleton instance
private static MyContext _instance;
/// Static constructor
static MyContext()
{
Database.SetInitializer<MyContext>( null );
}
/// Singleton constructor.
private MyContext() : base( "Name=MyContext" )
{
}
/// Singleton Instance Property
public static MyContext Instance
{
get
{
if( null == _instance ) {
_instance = new MyContext();
}
return _instance;
}
}
...
}
我在StackOverflow上發現了一個類似的問題: 實體框架錯誤 - 同時進行數據庫讀取 ,但遺憾的是這個問題沒有答案。
謝謝大家,結果證明靜態上下文確實是我問題的根本原因。 當我們在服務器上執行壓力測試時,結果很容易重現,因此多個線程正在使用靜態上下文。 這將導致與上述相同的錯誤,以及其他一些錯誤。
現在每次調用都會創建上下文,錯誤消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.