wake-up-neo.com

AddDbContext oder AddDbContextPool

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.

41
Gabriel Luci