我有一个使用 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)
...
Run Code Online (Sandbox Code Playgroud)
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" …Run Code Online (Sandbox Code Playgroud) 我有一个 Azure 函数 (v2),其中数据通过 HTTP 正文作为 JSON 传入。我想使用标准的Trace和Request事件在 Application Insights 中记录其中的一些 JSON 数据。
到目前为止我尝试过的:
ITelemetryInitializer解析正文并将属性添加到ISupportProperties.Properties. 但这有两个缺点:每个请求都会多次读取和解析主体(一次在我的函数中,在遥测初始化程序中多次),有时访问主体会抛出异常,因为它已被处理(可能它会消失)函数调用结束时的范围)。TelemetryClient在我的函数中使用一个。但是这个客户端似乎没有合适的属性来设置:
TelemetryClient.Context.GlobalProperties 用于全局属性,而不是请求范围的属性;TelemetryClient.Context.Properties已过时,我不知道如何在ISupportProperties.Properties那里使用推荐的替代品。理想情况下,我想使用在我的函数中解析的数据,并使用该数据来初始化遥测数据。