Entity Framework Webcasts Serie

In den vergangenen Tagen gingen Teil 4 und 5 meiner Entity Framework Webcast Serie online. Außerdem ist geplant in den kommenden Tagen noch Teil 6 zu veröffentlichen. Das liegt darin begründet, dass ich verstärkt per E-Mail adressiert mit der Bitte wurde, die restlichen Teile nachzuschieben. Außerdem erhielt ich mehrfach Anfragen bzgl. diverser Schwerpunkte, die ich in zukünftigen Beiträgen aufgreifen möge. Den Bitten werde ich so weit mir möglich nachkommen.

Deshalb an dieser Stelle nochmal der Hinweis, dass man mich über die üblichen Kommunikationskanäle gerne ansprechen darf. Das ein oder andere Feedback hilft mir auch dabei mich immer wieder aufzurappeln und in der Freizeit derartigen Inhalt zu produzieren.

 

Hier ein kurzer Auszug aus einer Mail, die ich gerade erst vergangene Woche erhalten habe:

Hallo Herr Armbruster,

erstmal kompliment für die 3 m.E. sehr guten Videos. Gerne hätte ich noch mehr bzgl. Entity Framework gesehen. Die Art und Weise wie die Thematik erläutert wird, ist Ihnen sehr gut gelungen.

Schön wäre z.B. noch:

– Genaue Erläuterung der Konfigurationsdatei

– WCF in Verbindung mit EF

– Architekturgestaltung bis hin zur UI

Die Gestaltung und Auslagerung der Queries im Teil3 ist für mich ein riesen Lernfortschritt gewesen. Probleme habe ich jetzt bekommen, als ich die Abfrage, also eine IQuery über einen WCF Dienst laufen lassen wollte. Dieser akzeptiert ja soweit mir bekannt ist, keine generischen Typen.

Können Sie hierzu eine kurze Info geben, wie dies realisiert werden kann?

 

 

Aktuell stehen folgende 5 Webcasts in Full HD Auflösung bereit:

  • Teil 1 – DbContext und POCOS: Wir wechselt man auf den neuen DbContext des Entity Framework 5 und erzeugt sich POCO Objekte frei von jeglichen Technologie-spezifischen Referenzen.
  • Teil 2 – UnitOfWork und IoC: Lose Kopplung ist in diesem Beitrag das Ziel. Der Client verliert vollständig seine Abhängigkeit zum Entity Framework bzw. zur Persistenzschicht.
  • Teil 3 – Queries: Hier zeige ich wie sich ein Query Repository aufbauen und Redundanz vermeiden lässt.
  • Teil 4 – Eigener Kontext: Dieses Video erläutert die Implementierung eines eigenen Kontexts.
  • Teil 5 – Weitere Datenbanken: Der nächste wichtiger Schritt ist das Einbinden weiterer Datenbanken. Der Vorzug hierbei ist die implizite Auflösung des entsprechenden Modells auf Basis von Konventionen.
  • Teil 6 – Stored Procedures und SQL Queries: In Anlehnung an Teil 3 baue ich hier ein entsprechendes Repository für reine SQL Abfragen und Stored Procedures auf.

Der vollständige Quellcode steht in dem Repository ‘MyCleanEntityFramework’ in meinem Github Account zur Verfügung.

Mit Tag(s) versehen: , , ,

14 Kommentare zu “Entity Framework Webcasts Serie

  1. Bernhard Mayr 15. Dezember 2012 um 15:29 Reply

    Hallo,

    zuerst einmal ein großes DANKESCHÖN für diesen Web-Cast. Nach so einer Zusammenstellung habe ich bisher vergebens in der Literatur gesucht! DANKE!!

    Wenn ich mir bei der Gelegenheit eine Frage zu „Persistence.ORM / Installer“ erlauben darf: Warum werden die beiden DbContexte manuell ergänzt? Nachdem schon so viel per Reflection ermittelt wird, könnten an dieser Stelle doch alle Assemblies, welche von DbContext ableiten, dynamisch (lose) ergänzt werden. Schneller wird’s dadurch nicht, dass ist klar. Bei uns in der Firma dekorieren wir die betroffenen Klassen mit einem Attribut.

    Eine Anregung hätte ich auch noch (wenn ich schon mal am Schreiben bin…): Wenn das Ganze jetzt noch um ein Wcf Interface erweitert wird, dann ist’s perfekt :-) Was mich an den gängigen Wcf Bsp in der Literatur „stört“ ist, dass die meist „nur“ einen Wcf-Dateservice aufziehen und fertig. Ich würde aber gerne Command’s (Command Pattern) verwenden – der Wcf Contract sollte meiner Meinung nach nur eine „Execute“ Methode haben. Dabei einen generischen Command empfangen und generische CommandResults retour geben.

    Darf ich dazu um Ihre Meinung bitten – Danke!

    Ich freue mich auf die kommenden Teile dieses WebCasts!

    Mit freundlichen Grüßen aus Mondsee,
    Bernhard Mayr

    Like

    • Uli Armbruster 19. Dezember 2012 um 21:28 Reply

      Hallo Hr. Mayr,
      ich bin diese Woche stark angebunden, werde Ihre Frage aber baldmöglichst beantworten. Kurz zur WCF: Hier habe ich bereits viele Fragen erhalten, sodass ich dazu auch noch einen Webcast erstellen möchte. Wie setzen Sie denn die WCF bei sich ein? Die bisherigen Fragen, die ich erhielt, bezogen sich auf Webservices. In welchem Kontext hätten Sie gerne Vorschläge?

      Like

    • Uli Armbruster 17. Januar 2013 um 23:41 Reply

      Die Anmerkung mit dem Context ist völlig richtig. Die Realisierung ist ja über mehrere Wochen/Monate hinweg entstanden. Da es anfangs so implementiert wurde (first make it run, then make it better…) und wir lediglich 2 Kontexte haben, war die Ambition nie groß, dies zu ändern. Allerdings wäre das natürlich in 2 Minuten erledigt :) Werde ich in einem der nächsten Webcasts zumindest in dem Sample anpassen. Ich habe übrigens einen Webcast über genau dieses Thema, nämlich die konventionsbasierte Registrierung von Komponenten, bereits in Planung. Der Code ist fertig, nur finde ich aktuell keine Zeit für den Webcast!

      Auf das Command Pattern sind wir unten ja nochmals eingegangen. Sehe ich genauso. Funktioniert allerdings nur innerhalb einer Technologie / Sprache. Kann also nicht jeder so realisieren.

      Like

  2. Bernhard Mayr 26. Dezember 2012 um 9:03 Reply

    Guten Morgen,

    Danke zunächst für Ihre Antwort!

    Ich denke dabei an eine verteilte Anwendung (n-tier). Logic tier und Data tier in einem Prozessraum, Client in einem eigenen Prozessraum. Ich verwende absichtlich das Wort Prozessraum und nicht Maschine, da ich mir vorstellen könnte, dass auch alles auf einer Maschine betrieben wird. Der Vorteil wäre, dass ein und derselbe Code für verteilte (Azure) und lokale Szenarien verendet werden kann.

    Zu WCF:

    a. Das System sollte so flexibel sein, und über mehrere Endpunkte konfigurierbar sein. Ob nun alle drei (zwei) Schichten auf einer Maschine oder verteilt auf zwei Maschinen laufen, ist u.a. eine Frage des Bindings (NetNamedPipeBinding bzw. MsmqBinding für nicht verteiltes Szenario, WSHttpBinding für ein verteiltes Szenario).

    b. AAA – Authentication / Authorization / Accounting: Sollte von Grund auf bedacht werden. Praktisch wäre es z.B., wenn ich meinen FB/Google/Windows Live-Account für die Authentication verwenden könnte. Verwendet man vorhandene Membership-Provider oder will man einen eigenen implementieren?

    c. LINQ: Welche Ansätze gibt es, LINQ-Abfrage (welche im Client-Code vorhanden sind), am Logic tier auszuführen? Sehr häufig werden Linq-Abfragen ja zu Filterung verwendet. Es ist nicht effizient zuerst alle vorhandenen Entities vom Server zum Client zu übertragen (Timeout, Standard-Wcf Einstellungen, …) und erst am Client zu filtern. Mir sind dazu zwei mögliche Ansätze eingefallen: Dynamic LINQ oder ein synchronisierter Context wie bei WCF-Data Services. Zu Dynamic Linq gibt es einen Blog von Scott Guthrie (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx).

    d. Streaming „großer“ Entities: Oftmals müssen die Inhalte von Dateien (Bilder, …) in Entitäten abgebildet werden. Wcf sieht dafür ein Streaming vor. Welchen eleganten Ansatz gibt es dafür? Manche Entitäten sollen per Stream übertragen werden, andere nicht.

    e. CallBack / Duplex: auch eine Grundsatz-Entscheidung – man sollte sich früh einig sein, ob man CallBacks verwenden will oder nicht.

    f. Command Pattern: Client und Server kommunizieren mit einander. Meist will der Client was vom Server („Liefere mir Daten“, „Berechne die Summe“, …). Ein eleganter Ansatz dazu wäre doch das Command-Pattern „Kapsle einen Befehl als ein Objekt“. Das Command-Pattern darf nun nicht mit MVVM-Command’s verwechselt werden! Business-Commands dienen dazu, dass der Client am Server eine Aktion in Auftrag gibt und synchron/asynchron ein Ergebnis erhält. Der WCF Contract verfügt damit nur über ein paar Methoden: „Execute“, „ExecuteAsync“, „ExecuteNoResult“ (so in der Art). Ähnlich wie die Entitäten, müssen die Commands am Server und am Client bekannt (eigenes Assembly). Jeder Command verfügt über eigene CommandParamter und jeder Command besitzt ein CommandResult-Objekt. Ausgeführt werden Commands ausschließlich in der Logic tier / Business Layer.

    Ich hoffe, ich konnte mich in der kürze verständlich ausdrücken. Evtl war ja der eine oder andere Punk dabei – DANKE!

    Frohe Festtage wünsche ich noch!
    Bernhard Mayr

    Like

    • Uli Armbruster 17. Januar 2013 um 23:35 Reply

      Hallo Hr. Mayr,

      auf Grund des Jahreswechsels standen bei mir viele Dinge an, deswegen kann ich jetzt erst antworten. Ich muss auch gleich darauf hinweisen, dass ich ab nächster Woche für 4 Wochen in Urlaub und großteils abgekoppelt vom Netz bin! Allerdings vergesse ich nie offene Fragen und werde mich früher oder später immer melden. Hier meine Antworten. Sie dürfen sich auch gerne direkt per E-Mail melden:

      Zu a+b) Falls ich Sie richtig verstanden habe, so sehe ich hier noch keine Tangierung des Entity Frameworks. Diese Dinge passieren alle bereits vorher bzw. über Konfiguration

      Zu c) Hier würde ich gerne erst ein Beispiel hören, bevor ich mich äußere, da es auf die Situation ankommt.

      Zu d) Damit habe ich mich noch nicht beschäftigt, sodass ich hier lediglich vermuten würde, dass dafür separate Operationen auf Serverseite zu implementieren sind

      Zu e) Richtig! Hängt von der Art der Anwendung ab…

      Zu f) Sicherlich ein guter Ansatz, welchen ich in den Webcast ja bei den Queries genauso verfolge. Die Commands müssen, wie Sie schon sagen, zwingend in eine separate Assembly! Lässt sich natürlich nur in einer homogenen Sprache/einem homogenen Framework umsetzen. Wenn der Client ein Java Client ist, fällt dies flach. Hatten Sie noch eine spezielle Frage hierzu?

      Like

  3. SAM 13. März 2013 um 19:02 Reply

    Hi Uli,

    I’m a English speaker from Amsterdam, I don’t understand German but I’m so impressed with all videos on Entity Framework, IOC etc, it’s amazing overview of Entity Framework. However, I would love and be very thankful, if you can provide some instructions or examples via email over using Stored Procedure with your “MyCleanEntityFramework”.

    Thanking you in advance, Hats off!.

    Regards,
    SAM

    Like

  4. SAM 14. März 2013 um 13:00 Reply

    Hi Uli, Thanks, I can wait for 2 weeks, but would be very eagerly waiting… I’m very new to Entity Framework and Design Pattern, but would really appreciate if you extend you UnitOfWork to use Repository EMPLOYEE instead of calling it directly ,employee = uow.Entities().First(); … Extracting/ Query/Updating data via repository would surly add many stars to the final output… Do you also provide online training and seminar lectures?

    Regards,
    SAM

    Like

    • Uli Armbruster 22. März 2013 um 11:11 Reply

      Hey Sam,
      no, I do not provide trainings since I do this stuff for fun in my leisure time.

      There’s a reason why I don’t implement a dedicated Employee repository in my UnitOfWork: This would violate the open closed principle because you would have to implement for each entity a dedicated repository. You can avoid this by making use of the query repository. Feel free to remove direct access to uow.Entities. This would make all developers in your team to make use of the queries repository, which is a gut thing! Code Sample:

      uow.ExecuteQuery(new GetEmployees())

      I hope this answer was helpful.

      I can recommend an article of one of the Entity Framework Core developers:
      http://msdn.microsoft.com/en-us/library/ff714955.aspx

      He wrote his code the way you suggested.

      Like

  5. SAM 23. März 2013 um 10:59 Reply

    Thanks, You are correct on OCP, I would prefer the way uow.ExecuteQuery (GetEmployees new ()), Instead of implementing a dedicated repository for each entity…

    Again Thumbs up on your new video, I don’t know German, but still I enjoyed your code walk through on Entity Framework – Part 6 – Stored Procedures and SQL queries,, ,

    Thumbs up, Great Work, and Amazing, again eagerly waiting on next video on stored procedure,
    ,,
    Regards,
    -SAM

    Like

    • Uli Armbruster 23. März 2013 um 14:19 Reply

      In the upcoming part 7 I will show you a way which increases the performance significantly!

      Like

  6. […] und für das Trennen der Entities vom Kontext entschieden, was sehr gut in dem Video Beitrag von Uli Armbruster “Entity Framework – Teil 1 DBContext und POCOS” erläutert […]

    Like

  7. […] Entity Framework Webcasts Serie […]

    Like

Hinterlasse einen Kommentar