簡體   English   中英

EntityFramework拋出NullReferenceException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM