EF zu ADO.NET Übergang

ado.net asp.net-mvc-3 dapper entity-framework

Frage

Brauchen Sie Vorschlag für die Migration wenige Module von asp.net mvc 3 Anwendung: Derzeit verwenden wir EF mit POCO-Klassen, aber in Zukunft für einige leistungsorientierte Module müssen wir zu ADO.NET oder einem anderen ORM-Tool (möglicherweise DAPPER .NETZ).

Das Problem, dem wir jetzt gegenüberstehen, ist: Unsere Ansichten hängen davon ab, dass Auflistungsklassen über EF geladen werden. Welche Strategie sollte ich für diese Entitätsklassen verwenden, um genau wie EF mit einem anderen ADO.NET- oder ORM-Tool geladen zu werden .

Was ich möchte, ist in der Lage zu sein, zwischen EF und ADO.NET mit minimalen Änderungen in der Datenzugriffsebene zu wechseln, da ich nicht möchte, dass meine Ansichten dadurch Wirkung zeigen.

Akzeptierte Antwort

Sie sollten das Repository-Entwurfsmuster verwenden , um die Implementierung Ihrer Datenzugriffsebene auszublenden. Das Repository wird dieselben POCOs zurückgeben und die gleichen Operationsverträge haben, egal welche Datenzugriffsebene Sie unter der Haube verwenden. Jetzt funktioniert das gut, wenn Sie echte POCO's verwenden, die keine virtuellen Methoden zum Lazy-Laden in ihnen haben. Sie müssen das Laden abhängiger Sammlungen auf Entitäten explizit behandeln, damit dies funktioniert.


Beliebte Antwort

Was ich bisher gesehen habe, ein nahtloser Übergang von einem ORM / DAL zum anderen ist eine Illusion. Das von Kevin vorgeschlagene Repository-Muster ist eine große Hilfe, eine Voraussetzung sogar (+1). Nichtsdestotrotz hat jedes ORM einen Fußabdruck in der Domänenschicht. Mit EF verwenden Sie wahrscheinlich virtuelle Eigenschaften, vielleicht Datenannotationen oder, leicht vergessen, ein Validierungsframework, das leicht hineinpasst (und andere ablehnt, die das nicht tun). Sie können sich darauf verlassen, dass EF Join-Tabellen zuordnen kann. Es kann Dinge geben, die Sie wegen EF nicht machen (aber gerne tun würden).

(Ganz zu schweigen von Werkzeugen, die ein Gerüst auf einem EF-Kontext ausführen. Das würde das Lock-In noch enger machen.)

Einige Dinge, die ich in deiner Situation tun könnte (vergib mir, wenn ich das Offensichtliche für dich sage)

  • Verwenden Sie EF optimal. (Beste Zuordnungen, beste Assoziationen, ...) Die Vorbereitung auf die Zukunft ist gut, aber sie verfällt leicht in das YAGNI- Muster.
  • Werde Experte in linq + EF: Es gibt viele Möglichkeiten, die Performance mit EF überflüssig zu machen. Angenommen EF ist gut genug!
  • Suchen Sie weiterhin nach Alternativen für hohe Leistung, z. B. die Verwendung gespeicherter Prozeduren, Parallelisierung, Hintergrundverarbeitung und / oder das Reduzieren von Datenvolumen, und wählen Sie eines aus, wenn die Anforderungen (funktional und nicht funktional) klar genug sind.
  • Vielleicht stellen Sie eine Abstraktionsschicht mit DTOs vor, die Ihren Ansichten jetzt dienen und in Zukunft von einem anderen ORM oder ADO leicht materialisiert werden können.
  • Expose POCO's als Schnittstellen, die später von anderen Objekten implementiert werden können.


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum