1

Ich erhalte diesen Fehler von meiner in Azure gehosteten Webanwendung. Es läuft ein paar Tage in Ordnung und hört dann plötzlich auf zu arbeiten.EF Core: Bei der Iteration der Ergebnisse einer Abfrage ist eine Ausnahme in der Datenbank aufgetreten.

Gibt es vielleicht ein Problem mit der Verbindung? Welcher Objektverweis hat keine Instanz?

YYYY-MM-DD hh:mm:ss [Error] An exception occurred in the database while iterating the results of a query. 
System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable.AsyncEnumerator.<BufferAllAsync>d__12.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at Microsoft.EntityFrameworkCore.Query.RelationalQueryContext.<RegisterValueBufferCursorAsync>d__14.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable.AsyncEnumerator.<BufferlessMoveNext>d__9.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable.AsyncEnumerator.<MoveNext>d__8.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.SelectAsyncEnumerable`2.SelectAsyncEnumerator.<MoveNext>d__4.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.<_FirstOrDefault>d__82`1.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Microsoft.EntityFrameworkCore.Query.Internal.TaskResultAsyncEnumerable`1.Enumerator.<MoveNext>d__3.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.SelectAsyncEnumerable`2.SelectAsyncEnumerator.<MoveNext>d__4.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.<MoveNext>d__5.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at MyProject.Data.SectionRepository.<GetByTypePathAndAlias>d__6.MoveNext() in /Users/webaccount/myproject/src/MyProject.Data/Repositories/SectionRepository.cs:line 34 

Es gibt nichts besonderes an meinem Repository oder Entitätscode.

public async Task<Section> GetByTypeId(string typeId) 
{ 
    var sections = from s in this.DbContext.Sections 
     where s.TypeId == typeId 
     select s; 

    return await sections.FirstOrDefaultAsync(); // <-- LINE 34 
} 

Das ist meine Entität.

public class Section 
{ 
     [Key] 
     public int Id { get; set; } 
     public DateTimeOffset CreatedDate { get; set; } 
     public string TypeId { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
} 

Ist es vielleicht damit verbunden? https://github.com/aspnet/EntityFrameworkCore/issues/8026

Wird es hilfreich sein, wenn ich meine Repository-Methoden konvertiere, um am Controller async zu synchronisieren und zu bleiben?

+1

Können Sie Ihre Verbindungszeichenfolge angeben? Vielleicht müssen Sie "MultipleActiveResultSets = true" darin einfügen – hugoterelle

+0

Es ist falsch. Ich werde es auf wahr setzen und es versuchen. Vielen Dank. –

+0

Nachdem es auf True gesetzt wurde und es laufen lässt, funktioniert es wieder. In ein paar Tagen bekomme ich jetzt einen weiteren Fehler: "Die Verbindung unterstützt keine MultipleActiveResultSets." Ich bin mir nicht sicher, warum ich das bekomme, wenn es ein paar Mal geklappt hat. –

Antwort

0

It runs ok for a few days and then suddenly stops working.

Object reference not set to an instance of an object

Zum einen können Sie remote debug your web app versuchen, die this.DbContext überprüfen.

Zweitens können Sie einen Kontext Instanz pro Anfrage erstellen/verwenden und this artciel shows some general guidelines when deciding on the lifetime of the context, können Sie es überprüfen.

+0

Ich werde versuchen, MARS so zu setzen, wie es von hugorgor vorgeschlagen wurde. Ich kann keine Instanz pro Anfrage erstellen, weil ich möchte, dass der DbContext injiziert wird. Ist es möglich, pro Anfrage, aber immer noch von irgendwo außerhalb des Repositories injiziert zu werden? –

+0

Es scheint, dass Sie Dependency-Injection-Framework verwenden, versuchen Sie bitte, einen DI-Container zu verwenden, um DbContext-Instanzen mit einer PerWebRequest-Lebensdauer zu injizieren. –

+0

Ist die Standardlebensdauer nicht transient? Das entspricht einer Webanfrage, denke ich. –

Verwandte Themen