TechEd 2010 Berlijn: Tweede dag

Voor vandaag stonden de eerste echte sessies op de kaart. En het waren er
zelfs zeven. Door de krappe pauzes, de enorme afstanden lopen en laptop/netwerk problemen was het wel even pezen.

biertje?

Er zaten een aantal sterke en minder sterke presentaties tussen en daarom ik
heb besloten om één sessie er speciaal uit te lichten.

Teched button

Code First for EF: “Great ideas require great data”

Het entity Framework (EF) is met Visual Studio 2010 een stuk
verbeterd. Persoonlijk werk ik er mee via ASP.Net MVC en ik vind het een heel
aardige oplossing. Het is niet heilig maar veel projecten worden er tegenwoordig
meer opgestart. Ik ging dus naar deze sessie om er nog meer van te leren.

Code First zit niet direct in EF4. Het is een CTP (nu nog versie 4) en
binnenkort komt versie 5 uit. Code First gaat uit van het eerst bouwen van
entiteiten en een entity-context vanuit code. Vervolgens wordt de code
automatisch geëvalueerd en daarna wordt volledig automatisch de database erbij
aangemaakt of onderhouden. De presentatie werd met een MVC2 applicatie demo ondersteund. Dit is wat ze deden:

Stap 1: maak enkele eintiteiten in code aan zoals Klant/Order klassen en
een DBContext afgeleide. Dit lijkt eigenlijk erg op de code die normaal door EF
wordt gegenereerd maar dan in heel veel minder regels en naar eigen smaak…

Stap 2: Codeer een  MVC controller die de DBcontext consumeert. En er
wordt nog een View bovenop gezet…

Stap 3: Compile, run en het draait. En er is ook gelijk al een database!

Bij conventie wordt gebruikt Sql Server. En er wordt een database
aangemaakt, met de context-naam, als er nog geen connectionstring is. En Code
First maakt tabellen en kolommen aan. Zelfs sleutels en relaties worden
aangemaakt. Het is zelfs zo handig om verschillen tussen database en code te
onderkennen.

Er zijn dus veel convensties. Maar die zijn veelal te overriden. Dus
draait alles om data-annotaties (attributen).

Naast de bestaande annotaties zijn er een aantal bijgekomen. Ik zag zo:
StringLength(255, MinimumLength=1) en NotMapped (dus dan wordt een
calculatie-veld niet in dataase opgeslagen).

Als je een property als Virtual aanmaakt, dan wordt die op de achtergrond
lazy opgelost. Bv. public virtual List<Order> Orders maakt dat de orders
lazy bij de klant worden opgehaald.

Bij collision tussen code (-wijziging) en de database kun je eea. handmatig
aanpassen of een Inititalzer schrijven. Bv. om de database eerst te droppen,
weer aan te maken en direct al de nieuwe database-data te vullen (bij iedere
F5). Er zijn dan geen collisions meer 🙂

Je kunt je eigen initalizers schrijven. En bij de start van de applicatie (bv. in de global.asax) moet deze even aangeroepen worden. Klaar..

De creatie van de DB kan redelijk goed gestuurd worden via het overriden
van de DBContext.OnModelCreating via fluent notatie. Zo kun je bv.
entity-overervingen in een andere tabel plaatsen dan de gewone klassen, via
code. Dit maakt wellicht ook een N op M relatie een stuk eenvoudiger. Nadeel is
wel dat je dit voor alle tabellen moet gaan uitschrijven.

Wat er in de DB gebeurt, wil je eigenlijk niet weten (..) Er is wel eea.
gedemonstreerd en dat zag er best aardig uit. Maar er zal een functie komen
waarbij DB wijzigingen zichtbaar worden van een bestaande database naar nieuwe database.

OData wordt ook ondersteund door EF4 Code First. En die kan dan bv. met
Excel powerpivot toegepast worden. Of het is via een Phone 7 (emulator) te
bekijken.

Geinteresseerd? Download dan nu Ctp4:http://Bit.ly/aCmC2H . Ikzelf wacht nog even op Ctp5, die komt binnen één maand beschikbaar. Ik heb achteraf nog met de presentator Tim Laverty gesproken. Mijn grootste probleem met EF4 is dat het amper bruikbaar is voor Unittesten. De EF tabellen en context laat zich lastig vangen in mocking frameworks. EF4 blijft maar zeuren om een connectionstring terwijl ik alle data in het geheugen wil hebben als mock.

Met Ctp5 wordt het mogelijk de data lokaal in het geheugen te houden.
Zolang je geen ApplyChanges uitvoerd, blijft het werken. Hiermee wordt het
mogelijk de context met eigen gevalideerde data te vullen om zo alle Linq
statement in de repository te testen. Eindelijk.

Code First komt uiteindelijk in Q1 van 2011 echt beschikbaar vanuit
Microsoft. En dat is dus al snel.

En dan waren er nog wat EF Futures:

  • Enums
  • Spatial types
  • Alternate keys
  • Table values functions
  • Migratie / deployment
  • Performance /scalability
  • Designer (multiple diagrams)
  • Linq

Alles bij elkaar wordt EF weer een stukje volwassener. Succes!

Advertenties