2009-05-27 10 views
13

In meiner ASP.NET-Anwendung möchte ich per Datenzugriffsschicht mit der Entity framweok implementieren, so dass ich es als ORM-Tool verwenden kann. Aber ich möchte nicht, dass der Rest der Anwendung darauf achtet, dass ich dies benutze oder durch irgend etwas, das spezifisch für Frameworks ist, verschmutzt wird.Verwenden von Entity Framework als Datenzugriffsschicht

Ich kann anscheinend niemanden finden, der das Entityframework ausschließlich in seiner Datenzugriffsebene verwendet, daher bin ich sehr daran interessiert, alle Online-Beispiele zu sehen, die diese Leute haben.

+0

Stackoverflow's DAL: http://blog.stackoverflow.com/2008/09/was-was-stack-overflow-built-with/ –

Antwort

2

ich Entity Framework verwendet haben, hilft als Datenzugriff auf meine letzten beiden Projekte. Diese sind groß (für mich mindestens) Projekte mit mehreren hundert Tabellen, 5-15 Entwickler über ein Jahr.

In beiden Projekten haben wir eine WCF-Schnittstelle in unsere Service-Schicht. Wir wollten die Entity Framework-Objekte in unseren WCF-Verträgen nicht verwenden. Wir haben daher Datentransferobjekte erstellt und zwischen DTOs und Entity Framework-Objekten gemappt.

Das bricht die Abhängigkeiten auf und hält die Verträge so stabil wie möglich, aber schafft zusätzliche Arbeit.

Abhängig von Ihrem Zeithorizont würde ich es so machen oder die POCO-Objekte in der nächsten Version verwenden, wie Kieth erwähnte.

2

Die EF oder ein anderes ORM (d. H. NHibernate) ersetzt nicht Ihre Datenzugriffsebene. Vielmehr ist das ORM eine Abstraktionsschicht von der DAL zur Datenquelle.

Lassen Sie sich nicht täuschen, dass Sie glauben, dass der EF die DAL überflüssig macht. Die EF ist nur ein weiteres Datenquellen-Framework. In der bewährten Vorgehensweise möchten Sie jedoch den gesamten Zugriff (Lesen/Schreiben) in einer gemeinsamen DAL abstrahieren und zentralisieren.

Hier ist ein perfektes Beispiel für das, was ich rede. Angenommen, Sie müssen einen bestimmten Benutzer in einem Ihrer Anwendungsfälle löschen. Beim Löschen des Benutzers möchten Sie jedoch möglicherweise andere Datensätze löschen, die mit dem gelöschten Benutzer verknüpft sind, um verwaiste Datensätze zu vermeiden (um ehrlich zu sein, würde ich dafür einen gespeicherten proc verwenden). Nun steckt dieser Anwendungsfall in einer BO, die für diesen Anwendungsfall sehr spezifisch ist, und das Löschen als Benutzer ist nur ein Teil des gesamten Anwendungsfalls.

Zu einem bestimmten Zeitpunkt haben Sie einen Entwickler, der aufgefordert wird, einen anderen Anwendungsfall einzubinden, der dazu führte, dass ein Benutzer gelöscht wurde! Der Entwickler kann ein paar Dinge tun. 1) Er könnte einen neuen Anwendungsfall erstellen, bei dem jetzt ein Benutzer gelöscht wird, aber vergessen wurde, alle zugehörigen Datensätze für diesen Benutzer zu löschen. 2) Möglicherweise hat er den vorherigen Anwendungsfall bemerkt, konnte ihn jedoch nicht direkt verwenden, ohne ihn für seinen Anwendungsfall zu verallgemeinern. Daher entschied er sich, einen Teil dieses Anwendungsfalls zu kopieren, der einen Benutzer und die zugehörigen Datensätze ordnungsgemäß löscht . Jetzt haben wir Teile des Codes, die praktisch die gleiche Sache tun - einen Benutzer löschen. Yuk! Nun habe ich diesen "Benutzer löschen" in ein DAL gesetzt.Benutzer-Helper-Klasse, vermeiden Sie diese schlechte Design-Praxis.

Wie auch immer, das eine nette Ding über die EF, es reduziert die Anzahl der Business Entities, die ich manuell erstellt habe und bietet eine andere Ansicht der Daten von einer Anwendungsebene als das, was in der Data-Store-Ebene gesehen wird.

Verwandte Themen