c# - EntityFramework 抛出 NullReferenceException

标签 c# asp.net asp.net-mvc entity-framework

我有一个使用 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 上发现了一个类似的问题:entity framework error - simultaneous db reads ,但不幸的是,这个问题没有答案。

最佳答案

谢谢大家,事实证明静态上下文确实是我问题的根本原因。当我们在服务器上执行压力测试时,结果证明它很容易重现,因此多个线程正在使用静态上下文。这将导致与上述相同的错误,以及其他几个错误。

现在每次调用都会创建上下文,并且错误消失了。

关于c# - EntityFramework 抛出 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31942293/

相关文章:

c# - 如何在泛型类型的构造函数中分配泛型类型的成员?

c# - asp.NET LINQ 从数据库中删除

c# - 如何在不使用模型的情况下使用 Entity Framework 执行原始 SQL 查询?

asp.net-mvc - ASP.Net Core 2.0 中 [AllowHtml] 的替代品是什么

asp.net-mvc - MVC GlobalFilters 未触发

c# - 如何判断用户是使用手机还是电脑访问网站

c# - ContainsKey 在 hashset<myClass> 的字典中

c# - 在 Dynamic LINQ 中使用 Contains 时,如何将动态类型转换为字符串?

c# - 如何在同一项目中的asp.net mvc Controller 中从asp.net web api获取数据

c# - 什么时候使用 Html.Action 而不是 Html.Partial