Laden...

Ist beim Entity Framework das Singleton-Pattern Best-Practice?

Erstellt von Christoph K. vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.458 Views
Christoph K. Themenstarter:in
821 Beiträge seit 2009
vor 6 Jahren
Ist beim Entity Framework das Singleton-Pattern Best-Practice?

verwendetes Datenbanksystem: MSSQL EF6

Hi zusammen,

ich wollte mal kurz nachhorchen, was mittlerweile BestPractise im Bereich EF-Context erzeugen ist.
Vor ein paar Jahren habe ich hier im Forum gelernt, das man immer (bei jedem ASP.NET Request) den EF-Context neu erzeugen soll. Eigentlich hieß es sogar, man sollte ihn immer neu erzeugen und so kurz wie möglich am Leben lassen.

Nun sehe ich teilweise im Netz Codeschnpsel, wo die Leute nur einen Context erzeugen und diesen mit Hifle eines Singletons verwalten.

Hat sich die BestPractise da mittlerweile geändert ?

Gruß
Christoph

P
1.090 Beiträge seit 2011
vor 6 Jahren

Meines Wissens hat sich da nichts geändert.

Und bei einer Webanwendung möchte ich dir ganz dringend von einem SingelTon Abraten.
(Was glaubst du was Passiert wenn 1000 Leute aus Unterschiedlichen Threads auf den SingelTon zugreifen)

Bei EF kannst du dir mal das Repository Pattern anschauen (das ist da meist so der Standart) oder auch die UnitOfWork.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

16.807 Beiträge seit 2008
vor 6 Jahren

Das hat nichts mit EF direkt zutun, sondern mit ADO.NET.
Ich kann mir hier aber gut vorstellen, dass Du einige Technologien vermischt (ASP vs WPF).

Keiner der Kontexte von ADO.NET ist Thread-Safe und daher auch nicht bei EF.
Context Sharing bei ASP.NET ist falsch - ohne Wenn und Aber. Anders sieht es aus bei Single Thread Applications.
An der Stelle dann nochmal ein Hinweis, wie im anderen Thread, auf die Grundlagen von Webanwendungen und Desktopanwendungen was Threads und Co betrifft.

Wie bereits auch im anderen Thread geschrieben:
Schlag Dir das Thema "Generell Singleton" aus dem Kopf, denn das brauchst Du in 99,999% der Fälle nicht und begehst damit eher einen Fehler, als dass Du etwas besser machst.
Wenn Du tatsächlich ein Objekt dauerhaft brauchst, dann mach das über Dependency Injection Konfigurationen und nicht mit (wie im letzten Thread) technisch falschen Singleton Implementierungen.