7

Nach den MSDN dem DbSet:Warum sollte ich ein Repository-Muster mit einer Arbeitseinheit oben auf meinem EF erstellen?

DbSet<TEntity> Class 

A DbSet represents the collection of all entities in the context oder , die aus der Datenbank abgefragt werden können, einen bestimmten Typ. DbSet-Objekte werden aus einem DbContext mithilfe der DbContext.Set-Methode erstellt.


Und nach dem MSDN der DbContext:

DbContext Class 

A DbContext instance represents a combination of the Unit Of Work and Repository patterns, so dass sie verwendet werden, können aus einer Datenbank abzufragen und Gruppe zusammen Veränderungen, die dann wird zurück in den Laden als eine Einheit geschrieben. DbContext ist konzeptionell ähnlich zu ObjectContext.


Damit die EF die repository pattern verwenden und die UOW intern.

DbSet < ----> Repository

DbContext < ----> Arbeitseinheit

Warum soll ich ein Repository-Muster mit einer Arbeitseinheit auf dem oberen Aufbau von mein EF?

+2

Sie sollten nicht. Eine Service-Schicht, auf der Sie Ihre Geschäftslogik konsolidieren können, ist jedoch sinnvoll. – Shoe

Antwort

7

Warum sollte ich ein Repository-Muster mit einer Arbeitseinheit oben auf meinem EF erstellen?

Hängt davon ab, wie Sie Ihre Abhängigkeiten verwalten möchten.

Wenn Entity Framework Ihre Abstraktionsschicht ist und die Datenbank selbst die Abhängigkeit ist, stellt Entity Framework in der Tat bereits Ihre Repositorys und Arbeitseinheiten bereit. Der Kompromiss besteht darin, dass Ihre Domain auf Entity Framework angewiesen ist. Solange diese Abhängigkeit akzeptabel ist, bist du gut.

Wenn Sie andererseits Entity Framework selbst als eine Abhängigkeit behandeln möchten, die möglicherweise ohne Änderungen am Domänencode ausgelagert werden kann, sollten Sie eine Abstraktion als Wrapper dafür erstellen.

Im Grunde kommt alles darauf an, wo Sie die Linie dessen zeichnen, was eine "externe Abhängigkeit" ist oder nicht. Bei einigen Projekten spielt es keine Rolle, für einige ist es die physische Datenbank ist, für einige ist es der Datenzugriffsrahmen usw.

+0

Große, Irgendwann sollten wir EntityTypeMapping verwenden, um die Klasse eindeutig zu machen. (Mit FluentAPI) .then wir den Domain-Einheit verwenden können und müssen nicht die EntityFramework – huoxudong125

7

Warum soll ich ein Repository-Muster mit einer Arbeitseinheit auf der Oberseite meiner bauen EF?

Wegen der Interface Segregation Principle.Die Methodensignaturen in DbSet und DbContext sind im Grunde genommen eine große Schwachstelle, es gibt eine große Diskrepanz zwischen ihnen und dem, was normalerweise in einem Repository und einer Arbeitseinheit erwartet wird. Mit anderen Worten, wenn Sie DbSet und DbContext direkt verwenden, leidet Ihr Application Services-Code unter undichte Abstraktionen.

In Ihrer Anwendungsschicht, müssen Sie entsprechende Semantik manipulieren. Der Code in dieser Schicht muss nur in Bezug auf die Geschäfte und große Sammlungen sprechen, wo Sie und speichern Sachen holen können. Dies sind sehr hochwertige, minimalistische abstrakte Konzepte. Entity Framework-Jargon ist einfach zu unscharf und Low-Level dafür, so dass Sie andere Idiome einführen müssen - Repository und UoW.

+0

verweisen denke ich, dass wahre Grund ist. Aber irgendwann brauchen wir weder Repository noch UoW, wenn unser Projekt klein oder einfach ist. Wir können direkt auf DbContext verweisen. – huoxudong125

Verwandte Themen