Generera databaser med Entity Framework

I Visual Studio 2008 SP 1 med .NET 3.5 SP 1 så kom möjligheten att skapa upp modeller baserade på en befintlig databas med hjälp av Entity Framework. I Visual Studio 2010 och .NET 4.0 kommer vi även att kunna gå åt andra hållet, det vill säga att vi kommer att kunna generera databasen utifrån modellen.

Redan i Visual Studio 2008 så kunde vi skapa upp en tom modell när vi lade till en Entity Data Model, där vi även kunde lägga till entiteter, relationer med mera, men sen tog det stopp. Det vi har nu är möjligheten att gå vidare med denna modell och genom att högerklicka på den välja att generera en databas baserad på modellen. I Beta 1 av Visual Studio 2010 så kan vi bara generera ett SQL-script som vi sedan kan köra mot databasen, men i senare versioner så kommer det att ske mer transparent.

För att testa den här funktionaliteten så kan vi skapa upp ett Console-project där vi lägger till en Entity Data Model och väljer att skapa en tom modell. Sedan drar vi in en entitet som heter ”Customer”. Vi kan här se att den redan har en property vid namn ”Id”, vilket är en primärnyckel. Vi låter denna vara och väljer istället att högerklicka på entiteten, väljer Add och sedan Scalar Type. Vi låter den heta FirstName, och skapar sedan en likadan för LastName. Sedan markerar vi dessa två, högerklickar och väljer ”Refactor into New Complex Type”. Just Complex Type är en typ som kan ha flera fält. Vi kallar denna för ”Name”. Vi skapar sedan en ny Complex Type på samma vis, men kallar den för ”Adress” och låter den ha fälten ”Street”, ”ZipCode” och ”Country”. Till syvende och sist så skapar vi en enkel typ som heter ”Age”.

Det bör nu se ut i stil med det här:

1

Kikar vi i Model Browser-fönstret (om det inte syns så välj View -> Other Windows -> Entity Data Model Browser) så kan vi se det här:

2

Här kan vi få en enkel, men bra överblick över våra typer i modellen, och kan enkelt ändra egenskaper för de enskilda objekten.

När vi nu har skapat upp modellen så ska vi generera en databas baserad på den. Till att börja med så högerklickar vi någonstans i modelldesignern och väljer ”Generate Database Script from Model”. Här får vi välja en befintlig databas, alternativt skapa upp en ny. Jag kommer i exemplet att använda en nyskapad SQL Server 2008-databas, men det kan lika gärna vara en SQL Server Express-databas.

När vi har valt databas så klickar vi vidare. I nästa steg så genereras ett SQL-script, vilket vi kommer att använda vid genererandet av databasen. Nu klickar vi på Finish och sedan Yes i rutan som dyker upp. Vi får nu upp vår genererade SQL i ett nytt fönster. Här högerklickar vi och väljer ”Execute SQL” och markerar databasen i dropdown-listan. Nu bör databasen vara skapad, vilket vi kan se om vi öppnar upp den i Server Explorer:

3

Vi kan här se att vår entitet har skapats upp, samt att våra komplexa typer har fått ett namn likt ”NamnetPåKomplexaTypen_NamnPåPropertyn”. Vi kan nu lägga till lite dummy-data i stil med:

4

Och nu till det roliga, nämligen kodningen!

Vi börjar med att skapa en instans av CustomersContainer, vilket är containern för vår Customer-klass. Sedan loopar vi igenom all data i dess CustomerSet.

Här kan vi se att våra komplexa typer faktiskt har skapats på ett sätt som får dem att se ut som om de vore främmande nycklar i databasen:

5

Den färdiga koden för att skriva ut namn och gata för alla användare kan se ut så här:

using System;
 
namespace GenerateDatabase
{
    class Program
    {
        static void Main(string[] args)
        {
            CustomersContainer customers = new CustomersContainer();
            foreach (Customer customer in customers.CustomerSet)
            {
                Console.WriteLine("Name:\t{0} {1}", customer.Name.FirstName, customer.Name.LastName);
                Console.WriteLine("Street:\t{0}", customer.Address.Street);
                Console.WriteLine("------------------------------");
            }
 
            Console.ReadKey();
        }
    }
}

Om vi sedan kör vår applikation så får vi det här:

6

Vi har här alltså skapat upp en databas baserad på vår modell, utan att själva behöva göra något själva direkt mot databasen. Goda nyheter för de som inte orkar sitta och skriva långa SQL-satser dagarna i ända för att få till tabellerna korrekt. :-)

3 Comments

Comments have been disabled for this content.