Wenn Sie ein neues Projekt starten, entscheiden Sie sich zunächst für Entity Framework ("EF") - es generiert jetzt viel besseres SQL (eher wie Linq to SQL) und ist einfacher zu warten und leistungsfähiger als Linq to SQL (") L2S "). Ab der Veröffentlichung von .NET 4.0 halte ich Linq to SQL für eine veraltete Technologie. MS war sehr offen dafür, die L2S-Entwicklung nicht weiter fortzusetzen.
1) Leistung
Dies ist schwierig zu beantworten. Bei den meisten Single-Entity-Operationen ( CRUD ) ist die Leistung aller drei Technologien nahezu gleich. Sie müssen wissen, wie EF und Linq to SQL funktionieren, um sie optimal nutzen zu können. Bei großvolumigen Vorgängen wie Abfrageabfragen möchten Sie möglicherweise, dass EF / L2S Ihre Entitätsabfrage so "kompiliert", dass das Framework SQL nicht ständig neu generieren muss, oder dass Probleme mit der Skalierbarkeit auftreten können. (siehe Änderungen)
Bei Massenaktualisierungen, bei denen Sie große Datenmengen aktualisieren, ist Roh-SQL oder eine gespeicherte Prozedur immer leistungsfähiger als eine ORM-Lösung, da Sie die Daten nicht über die Leitung zum ORM marshallen müssen, um Aktualisierungen durchzuführen.
2) Entwicklungsgeschwindigkeit
In den meisten Szenarien wird EF nackte SQL / gespeicherte Prozesse in Bezug auf die Entwicklungsgeschwindigkeit umhauen. Der EF-Designer kann Ihr Modell aus Ihrer Datenbank aktualisieren, wenn es sich ändert (auf Anfrage), sodass Sie nicht auf Synchronisierungsprobleme zwischen Ihrem Objektcode und Ihrem Datenbankcode stoßen. Das einzige Mal, dass ich die Verwendung eines ORM nicht in Betracht ziehen würde, ist, wenn Sie eine Anwendung vom Typ Berichterstellung / Dashboard ausführen, in der Sie keine Aktualisierungen durchführen, oder wenn Sie eine Anwendung erstellen, um nur Rohdatenwartungsvorgänge für eine Datenbank durchzuführen.
3) Ordentlicher / wartbarer Code
Zweifellos schlägt EF SQL / Sprocs. Da Ihre Beziehungen modelliert sind, sind Verknüpfungen in Ihrem Code relativ selten. Die Beziehungen der Entitäten sind für den Leser bei den meisten Abfragen fast selbstverständlich. Nichts ist schlimmer, als von Schicht zu Schicht Debugging oder durch mehrere SQL / Middle Tier gehen zu müssen, um zu verstehen, was tatsächlich mit Ihren Daten passiert. EF bringt Ihr Datenmodell auf sehr leistungsstarke Weise in Ihren Code.
4) Flexibilität
Gespeicherte Prozesse und unformatiertes SQL sind "flexibler". Sie können Sprocs und SQL nutzen, um schnellere Abfragen für den jeweiligen Fall zu generieren, und Sie können native DB-Funktionen einfacher als mit und ORM nutzen.
5) Insgesamt
Lassen Sie sich nicht in die falsche Zweiteilung bei der Auswahl eines ORM oder der Verwendung gespeicherter Prozeduren verwickeln. Sie können beide in derselben Anwendung verwenden, und Sie sollten es wahrscheinlich tun. Big-Bulk-Operationen sollten in gespeicherten Prozeduren oder SQL (die tatsächlich von der EF aufgerufen werden können) ausgeführt werden, und EF sollte für Ihre CRUD-Operationen und die meisten Anforderungen Ihrer mittleren Ebene verwendet werden. Vielleicht möchten Sie SQL zum Schreiben Ihrer Berichte verwenden. Ich denke, die Moral der Geschichte ist die gleiche wie immer. Verwenden Sie das richtige Werkzeug für den Job. Aber das Dünne daran ist, dass EF heutzutage sehr gut ist (ab .NET 4.0). Wenn Sie es in Echtzeit lesen und gründlich verstehen, können Sie mühelos erstaunliche, leistungsstarke Apps erstellen.
BEARBEITEN : EF 5 vereinfacht diesen Teil ein wenig mit automatisch kompilierten LINQ-Abfragen , aber für wirklich hochvolumige Inhalte müssen Sie auf jeden Fall testen und analysieren, was in der realen Welt am besten zu Ihnen passt.