Entity Framework 4.0 in een N-Tier applicatie met WCF implementeren

Momenteel ben ik bezig om een nieuw project op te zetten waar ik gebruik wil gaan maken van het Entity Framework 4.0 en WCF. Aangezien .NET 4.0 net uit is, zou dit geen probleem meer moeten zijn.
Nu heb ik nog niet eerder goed met het EF gewerkt, dus is het allemaal nog redelijk nieuw voor mij. Gelukkig zijn er veel mensen die hier al het een en ander over hebben geschreven en ook duidelijke voorbeelden hebben gemaakt hoe het kan worden geimplementeerd.

Omdat ik toch graag een n-layer applicatie wil opzetten liep ik (onder andere) tegen het probleem aan dat het database model niet direct bekend is zijn op de client (de website). De verschillende objecten/entities zullen dus moeten worden geserialized om op de website te kunnen gebruiken. Dit is natuurlijk iets waar al menig ander tegenaan is gelopen, dus heb ik gezocht naar mogelijke oplossingen.

De eerste nuttige hit die ik heb gevonden was een post van Eliska Flasko uit het MSDN Magazine van April 2010 (https://msdn.microsoft.com/en-us/magazine/ee336128.aspx).
Een heel duidelijk stuk waar mij de grote lijnen wel duidelijk werden. Tijdens het doorlopen van dit stuk zag ik dat ze hier gebruik maken van het ADO.NET EntityObject Generator template en niet de Self-Tracking variant.

Dit kan ik natuurlijk ook doen, maar dan zal ik het bijhouden van versies en dergelijke in een later stadium zelf moeten gaan bijhouden. Aangezien het EF-team hier waarschijnlijk beter over heeft nagedacht dan ik zou kunnen, wil ik dus voor de Self-Tracking kiezen.

Uiteraard zijn er ook mensen die dit al een keer hebben geimplementeerd en ben ik daar dus naar op zoek gegaan. Al vrij snel kwam ik uit op een post van het ADO.NET team van juni 2009 (https://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-self-tracking-entities-for-the-entity-framework.aspx). Ook weer een heel duidelijke post met allerlei screenshots ter verduidelijking.
Tijdens het lezen van de posts zag ik trouwens ook dat je een database kunt laten genereren door het EF aan de hand van het model dat je hebt gemaakt. Handig!

In de post van het ADO.NET team komt het er eigenlijk op neer dat je de T4 templates van het ADO.NET Self-Tracking Entity Generator template in het project maakt waar het model ook in staat. Dit is ook verplicht, aangezien de templates het edmx-bestand nodig hebben. Zodra dit is gedaan maak je een link naar de T4 templates in de andere projecten. Zo heb ik het gegenereerde model in het DAL project ingeladen en de gegenereerde entities in het Model project, het resultaat is hieronder te zien.

Op deze manier zal alleen de DAL met de database kunnen praten en kun je de Entities overal gebruiken binnen je solution, mits je de reference natuurlijk aanmaakt.

Omdat ik nu self-tracking entities heb gemaakt, worden eventuele wijzigingen automatisch bijgehouden zodra ze vanuit m’n WCF service worden geserialized en op de client (website) gedeserialized.

Het is natuurlijk nog afwachten of alles ook in 1x goed werkt, maar het ziet er in ieder geval behoorlijk eenvoudig uit.


Share