Die Frage Kopfzeile ist klar, ich möchte wissen, warum es anders ist und warum, wann es für mein Projekt auszuwählen?Was unterscheidet das ADO.NET Entity Framework von anderen ORMs auf dem Markt?
Antwort
I wrote a blog post on this a while ago. Kurz gesagt, es erfordert einen grundlegend anderen Ansatz als ORM, wie Hibernate, ECO und die anderen ORMs, die ich angeschaut habe. Sie können denken, dass dieser Ansatz besser, schlechter oder unwichtig ist, aber wenn Sie tief genug schauen, ist es schwer zu bestreiten, dass es anders ist. Aber nimm mein Wort nicht darauf. Wenn Sie wirklich an diesem Thema interessiert sind, empfehle ich dringend, this technical paper und this interview in ACM-Warteschlange zu lesen.
Dies ist wahrscheinlich nicht die Antwort, die Sie suchen, aber ich denke nicht, dass Sie es in Ihrem Projekt verwenden sollten. Es ist sehr jung und nicht sehr komplett. Warte, bis die nächste Version herauskommt.
Wenn Sie darauf bestehen, Entity Framework zu verwenden, gibt es ein paar gute Dinge darüber. Ein schöner Weg ist die Möglichkeit, komplexe Mappings auf einfache Weise zu erstellen. Und da es sich um eine Microsoft-Technologie handelt, ist die IDE-Integration natürlich gut.
Aber wie ich schon sagte, ich habe es ausprobiert und ich glaube nicht, dass es für den echten Gebrauch bereit ist.
Auf jeden Fall viel Glück bei Ihrem Projekt
Von dem, was ich gelesen habe, hat es eine gute Unterstützung für WCF Remote/binäre Serialisierung, die etwas, das viele ORMs ist nicht sehr gut unterstützt (wenn überhaupt). Es kann sich lohnen, nachzuforschen, ob Sie eine Client/Server/Remoting-App mit ORM auf der Client-Seite erstellen möchten.
Ich denke, Sie denken vielleicht an ADO.NET Data Services, die eine schöne REST-Schnittstelle und WCF-Unterstützung hat. –
Um zu klären, ich spreche über Mapping-Entities mit WCF-Dienste als ihre Quelle. –
Was EF hat, würde ich nicht "gute Unterstützung" nennen ... google: Entity Framework WCF, und Sie werden nur Seite für Seite von Ausgaben finden ... –
Was anders? Es hat nicht von allen anderen ORMs gelernt.
Hier sind die Fragen, die ich habe
Does LINQ-to-Entities really return different results depending on previous queries?
Working Around Entity Framework's Large Data Model Issues
No Change Tracking for ADO.NET Entity Framework 2010
für InfoQ aufgespürt und dieses Tool ist ein Muss, wenn Sie sie entscheiden, zu verwenden.
Meta-data Synchronization Tools for LINQ to SQL and ADO.NET Entity Framework
ADO.NET ist kein ORM.
Grundsätzlich ist der Unterschied das Maß der Abstraktion in jedem einzelnen.
Mit ADO, Abfragen Sie im Grunde die DB und verwenden Sie die Ergebnisse als Objekte, ist wie eine Brücke zwischen dem RDBMS und Ihren Objekten.
Sie modellieren Ihre DB und dann erstellen Sie ein Objekt aus diesem Modell. Deshalb ist es ein Entity Framework (db entities)
ORM sind nicht zum Abfragen oder zur Darstellung von Datenbankeinträgen als Objekte (obwohl sie sowieso alle benutzt werden - ich eingeschlossen -), aber eine Möglichkeit, Ihr Objektmodell in einem relationalen persistent zu halten Datenbank.
Sie sind Object Relational Mapping (nicht Relational Mapping auf Objekt)
Also, Sie wählen eine oder das andere, wenn Sie eine Domain (Objekt) Modell haben, und Sie wollen etwas, das es zu bestehen bleiben (zu einem RDBMS) oder wenn Sie ein Entitätsmodell haben und es als Objekte in Ihrer App verwenden möchten.
Einige der besten Talente in der ORM-Welt in .NET scheinen an Projekten wie NHibernate (frei-open-source; ich benutze es) und LLBLGen Pro (kommerziell) zu arbeiten.
NHibernate ist der maßgebliche Standard für unternehmensweites, herstellerübergreifendes ORM.NHibernate ist auch der Standard für eine reine Implementierung von ORM, der es dem Entwickler ermöglicht, Domänenmodelle völlig unabhängig von der NHibernate-Infrastruktur zu schreiben und Code-generierte Klassen vollständig zu eliminieren.
NHibernate kann auf den ersten Blick unheimlich aussehen. Aber es ist eigentlich ziemlich freundlich, wenn man ein bisschen damit arbeitet, und seit Juli läuft die Arbeit, um NHibernate fast konfigurationsfrei zu machen.
Toller Blogbeitrag übrigens. –