Entity Framework 4 / POCO - Wo soll ich anfangen? [geschlossen]

183

Ich habe eine Weile programmiert und zuvor LINQ-To-SQL und LINQ-To-Entities verwendet (obwohl bei der Verwendung von Entities eine Entity / Table 1-1-Beziehung bestand - dh nicht viel anders als bei L2SQL).

Ich habe viel über Inversion of Control, Arbeitseinheit, POCO und Repository-Muster gelesen und möchte diese Methode in meinen neuen Anwendungen verwenden.

Ich habe Probleme damit, einen klaren, prägnanten Leitfaden für Anfänger für EF4 zu finden, der keine Kenntnisse über EF1 voraussetzt.

Die spezifischen Fragen, die ich beantworten muss, sind:

Code zuerst / Modell zuerst? Vor- / Nachteile in Bezug auf EF4 (dh was passiert, wenn ich zuerst Code mache, den Code zu einem späteren Zeitpunkt ändere und mein DB-Modell neu generieren muss - Werden die Daten beibehalten und transformiert oder gelöscht?)

Angenommen, ich gehe zuerst zum Code (ich würde gerne sehen, wie EF4 das in ein DB-Schema konvertiert), wie fange ich eigentlich an? Sehr oft habe ich Artikel mit Entitätsdiagrammen gesehen, in denen stand: "Das ist also mein Entitätsmodell, jetzt werde ich ..." - Leider ist mir nicht klar, ob sie das Modell im Designer erstellt und in gespeichert haben Code generieren und dann die weitere automatische Codegenerierung stoppen -oder- Sie haben codiert (POCO)? Klassen und die irgendwie importiert sie in die Deisgner-Ansicht?

Ich nehme an, ich brauche wirklich ein Verständnis dafür, woher die "Magie" kommt und wie ich sie selbst hinzufügen kann, wenn ich nicht nur ein EF-Modell direkt aus einer Datenbank generiere.

Ich bin mir bewusst, dass die Frage etwas vage ist, aber ich weiß nicht, was ich nicht weiß. Daher sind Eingaben / Korrekturen / Klarstellungen willkommen.

Unnötig zu sagen, ich erwarte nicht, dass jemand hier sitzt und mir EF beibringt - ich möchte nur ein paar gute Tutorials / Foren / Blogs / etc. für komplette Entitätsneulinge

Basic
quelle
3
Seien Sie wirklich WIRKLICH vorsichtig mit der Lebensdauer Ihrer Verbindungen: bit.ly/fi83NV Dies ist etwas, das Sie wirklich beachten sollten, wenn Sie Kontexte in Repositorys abstrahieren. Es könnte funktionieren, aber tatsächlich langsam mehr und mehr offene Verbindungen
aufbauen
@ BRitishDeveloper - Sehr guter Rat. Dies hat uns tatsächlich aufgefangen, aber in umgekehrter Weise: Wir haben einen IoC-Container zum Abrufen von Repositorys verwendet und hatten ein Problem, bei dem der dem Repository zugewiesene Kontext die Verbindung nach einiger Zeit schließen würde, aber nicht als entsorgt / gekennzeichnet wird ähnlich. Wir haben den Kontext schließlich selbst mit einem IsDisposed () erweitert, das den üblichen Entsorgungsstatus und den Verbindungsstatus überprüft, sodass wir bei Bedarf einen weiteren erstellen können.
Basic
Ein weiterer praktischer Tipp ist, dass beim Abrufen eines neuen Kontexts Objekte, die dem alten Kontext zugeordnet sind, nicht über die entsprechende Änderungsverfolgung verfügen und Probleme mit der Nichtübereinstimmung des Kontexts verursachen. Wenn Sie also eine App mit langer Laufzeit haben und den Kontext in der Mitte ändern, Ausführung müssen Sie alle Ihre Entitäten erneut abrufen. Um es interessanter zu machen, mussten wir tatsächlich 2 nebeneinander laufen lassen und haben am Ende einen Code geschrieben, um die beiden gut abzubilden ...
Basic
1
@Basiclife Ich bin auf dasselbe Problem gestoßen :) Ich wollte meine Gedanken über das Aktualisieren von getrennten Entitäten für eine Weile aufschreiben und Sie haben mich gerade dazu ermutigt: britishdeveloper.co.uk/2011/03/…
BritishDeveloper

Antworten:

56

Diese Artikel könnten von Interesse sein ... Die Serie befasst sich wirklich mit den Vor- und Nachteilen eines POCO-Ansatzes.

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading. aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

In diesen Artikeln erwähnt der Autor zukünftige Artikel, die Best Practices bei der Implementierung von Repository- und Unit of Work-Mustern beschreiben, aber ich kann sie nicht finden. Diese Artikel sind gut geschrieben und ich würde gerne mehr von diesem Autor lesen.

Kelly Sandwiches
quelle
2
Als jemand, der bereits mit Entity Framework vertraut ist und den Designer verwendet, war dies eine großartige Einführung in POCO.
Nathanchere
1
Wenn Sie nach der Unit of Work suchen, finden Sie sie unter blogs.msdn.com/b/adonet/archive/2009/06/16/…
Mike
11

Ich bin auf Folgendes gestoßen : http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

So erhalten Sie Schritt für Schritt zuerst Code. Es erfordert CTP 3 für EF4 (Download von diesem Artikel verlinkt).

Dies ist ziemlich nahe an dem, wonach ich gesucht habe (obwohl im Idealfall eine Lösung, die nicht auf einem CTP basiert, vorzuziehen gewesen wäre)

Basic
quelle
NB: Dieses CTP war ursprünglich für VS2010 Beta gedacht, unterstützt aber auch VS2010 RTM.
Basic
7

Ich empfehle Ihnen, sich etwa eine halbe Stunde Zeit zu nehmen und ein stabiles EF1.0-Modell in Ihrem aktuellen VS zu generieren. Auf diese Weise können Sie die Metaphern und Konzepte von EF 4.0 besser verstehen. Schlagen Sie einfach einen einfachen Kunden, Produkte und Bestellungen db ... Ich empfehle, Ihre eigenen zu machen und Northwind nicht zu verwenden.

Chris B. Behrens
quelle
4

Dies ist eine großartige Frage, die jedoch schwer auf dem neuesten Stand zu halten ist, da das Entity Framework weiter ausgereift ist. Der wahrscheinlich beste Startpunkt, um auch in Zukunft auf dem neuesten Stand zu bleiben, ist die EF-Seite von Microsoft .

Einige andere Links, die ich beim Googeln hilfreich fand (mit Schwerpunkt auf Code First):

Dan
quelle
3

Sie können Lermans Buch oder etwas Einfacheres wie "Pro linq object-relational Mapping" nehmen. Alle Konzepte sind mit POCO immer noch dieselben, außer dass Sie jetzt die Codegenerierung deaktivieren und direkt Ihrem Modell in edmx csdl zuordnen sollten (oder Ihren eigenen POCO-Generator erstellen sollten). Alle Mapping-Prinzipien sind auch gleich. Wie auch immer, zur Laufzeit arbeiten Sie mit einem Proxy, der von Ihrem POCO-Objekt abgeleitet ist. Sie sollten sich also Gedanken über die Interception-Unterstützung machen (Virtualisierung Ihrer POCO-Eigenschaften).

Stimme
quelle
3

Es gibt auch diese Tutorials:

Daniel
quelle
Seine Projektstruktur sieht genauso aus wie ein altes nHibernate-basiertes Projekt, an dem ich gearbeitet habe. Geeignet für all den WCF-Jazz, an dem ich mich gerne erfrischen möchte. Feste Verbindung.
Merritt
2

Hier ist eine exemplarische Vorgehensweise für die POCO-Vorlage für das Entity Framework, die ziemlich gut aussah. Vielleicht möchten Sie auch das ADO.NET-Teamblog lesen . Wenn Sie am Anfang (EF v1.0) als Grundlage für Ihr EF-Wissen beginnen möchten, fand ich Julia Lermans Programming Entity Framework- Buch sehr vollständig.

DaveB
quelle
Danke - ich hatte das Buch nicht gesehen, aber ich habe beide Links gelesen. Die exemplarische Vorgehensweise für Vorlagen ist hilfreich, um zu erklären, wie POCO-Objekten zusätzliche Funktionen hinzugefügt werden können, sobald sie definiert sind (z. B. verzögertes Laden), aber (und ich vermisse hier möglicherweise etwas Offensichtliches) erklärt sie nicht, wie Sie beginnen sollen (dh einfach Das Erstellen einer Klasse wie angegeben macht sie weder zu einer Entität noch zu einem Modell.) Ich habe ähnliche Erfahrungen mit dem Blog gemacht. Ich werde jedoch in Betracht ziehen, das Buch zu bekommen - es sieht vielversprechend aus - Danke.
Basic
2
In Bezug auf das Buch von Julia Lerman ist zu erwähnen, dass sie an einer zweiten Ausgabe für EF4 arbeitet: learnentityframework.com/LearnEntityFramework/book/… . Ich erinnere mich, dass ich irgendwo gelesen habe, dass der geplante Veröffentlichungstermin im Mai dieses Jahres liegt, aber ich kann die Quelle nicht mehr finden. Auch ich habe gerade diese Seite gefunden: nackte Objekte.net/home/index2.shtml
Slauma
Slauma, der Link, den Sie bereitgestellt haben, sah genau so aus, wie ich ihn brauche - außer dass er eine "Naked Obects" -Bibliothek von Drittanbietern verwendet, die die Komplexität irgendwie zu verschleiern scheint. Für eine Minute dachte ich, Sie hätten sie geknackt
Basic
1

Julia Lerman hat eine schöne Reihe von Einführungsvideos , jeweils ca. 10 Minuten. Sie sind einführend, aber es gibt viele praktische Tipps, die potenzielle Lernhindernisse aus dem Weg räumen. Besonders gut hat mir ihre Demonstration gefallen, wie sie mit SQL Server Profiler das eigentliche SQL beobachten kann.

David Pope
quelle
1

Wenn Sie getrennte Szenarien verwenden möchten, empfehle ich Ihnen, das Buch "Programmieren von DbContext" von Julie Lerman in Kapitel 4 zu lesen.

Ich habe viele Beispiele in Blogs usw. gefunden, aber fast alle handeln von verbundenen Szenarien.

Ich fange auch an. und dieses Buch hat mir sehr geholfen. Ich habe ihr übrigens drei Bücher gekauft.

Rodolfo
quelle
0

Wow, viele Antworten. Wie wäre es mit einem Beispiel, das eine optimierte Version von T4-Vorlagen enthält, die insgesamt POCO + -Schnittstellen + -Repositorys generieren?

https://entityinterfacegenerator.codeplex.com

Believe2014
quelle
Interessant und praktisch zum Testen von Repositries / Kontexten, aber warum sollten Sie die Entitäten selbst abstrahieren müssen? Per Definition sollten sie keinen Funktionscode enthalten.
Basic
Du hast Recht. Meistens benötigen die Benutzer keine separaten Schnittstellen. Aber es hilft Menschen, die Zirkelverweise lösen und die Schnittstellen, nicht die eigentlichen Klassen, mit Dritten teilen möchten. Dies ist sehr hilfreich, wenn Ihr Unternehmen ein Audit mit Integration von Drittanbietern bestehen muss, für dessen Implementierung keine detaillierte Implementierung erforderlich ist.
Believe2014