Welche müssen wir für Asp.net Core-Apps verwenden? AddDbContext
oder AddDbContextPool
? Laut EF Core-Dokumentation bietet AddDbContextPool
eine hohe Leistung, aber die standardmäßigen Asp.net Core-Projektvorlagen verwenden AddDbContext
.
Die Antwort ist hier (unter "DbContext-Pooling"): https://docs.Microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#dbcontext-pooling
DbContext
ist nicht threadsicher. Sie können also nicht dasselbe DbContext
-Objekt für mehrere Abfragen gleichzeitig wiederverwenden (seltsame Dinge passieren). Die übliche Lösung hierfür war, jedes Mal, wenn Sie ein Objekt benötigen, ein neues DbContext
-Objekt zu erstellen. Das ist, was AddDbContext
tut.
Es ist jedoch nichts Falsches daran, ein DbContext
-Objekt wiederzuverwenden, nachdem eine vorherige Abfrage bereits abgeschlossen wurde. Das ist, was AddDbContextPool
tut. Es hält mehrere DbContext
Objekte am Leben und gibt Ihnen ein unbenutztes, anstatt jedes Mal ein neues zu erstellen.
Welches Sie verwenden, liegt ganz bei Ihnen. Beides wird funktionieren. Pooling hat einige Leistungssteigerungen. In der Dokumentation wird jedoch gewarnt, dass Sie private Eigenschaften in Ihrer Klasse DbContext
, die nicht für Abfragen freigegeben werden sollen, nicht verwenden sollten. Ich stelle mir aber vor, dass das ziemlich selten ist, so dass Pooling in den meisten Fällen angemessen sein sollte.