Database First

Dieses Video und die exemplarische Vorgehensweise bieten eine Einführung in die Database First-Entwicklung mit Entity Framework. Mit Database First können Sie auch ein Reverse Engineering eines Modells aus einer vorhandenen Datenbank ausführen. Das Modell wird in einer EDMX-Datei (.edmx-Erweiterung) gespeichert und kann im Entity Framework-Designer angezeigt und bearbeitet werden. Die Klassen, mit denen Sie in Ihrer Anwendung interagieren, werden automatisch aus der EDMX-Datei generiert.

Video ansehen

Dieses Video bietet eine Einführung in die Database First-Entwicklung mit Entity Framework. Mit Database First können Sie auch ein Reverse Engineering eines Modells aus einer vorhandenen Datenbank ausführen. Das Modell wird in einer EDMX-Datei (.edmx-Erweiterung) gespeichert und kann im Entity Framework-Designer angezeigt und bearbeitet werden. Die Klassen, mit denen Sie in Ihrer Anwendung interagieren, werden automatisch aus der EDMX-Datei generiert.

Präsentation:Rowan Miller

Video: WMV | MP4 | WMV (ZIP)

Voraussetzungen

Sie müssen mindestens Visual Studio 2010 oder Visual Studio 2012 installiert haben, um diese exemplarische Vorgehensweise abzuschließen.

Wenn Sie Visual Studio 2010 verwenden, müssen Sie außerdem NuGet installiert haben.

 

1. Erstellen einer vorhandenen Datenbank

Wenn Sie auf eine bestehende Datenbank zugreifen, ist diese in der Regel bereits erstellt, aber für dieses Beispiel müssen wir eine Datenbank erstellen, auf die wir zugreifen können.

Der Datenbankserver, der mit Visual Studio installiert ist, unterscheidet sich je nach der installierten Version von Visual Studio:

  • Wenn Sie Visual Studio 2010 verwenden, erstellen Sie eine SQL Express-Datenbank.
  • Wenn Sie Visual Studio 2012 verwenden, erstellen Sie eine LocalDB-Datenbank.

 

Lassen Sie uns nun die Datenbank generieren.

  • Öffnen Sie Visual Studio.

  • Ansicht > Server-Explorer

  • Klicken Sie mit der rechten Maustaste auf Datenverbindungen > Verbindung hinzufügen….

  • Wenn Sie im Server-Explorer noch keine Verbindung mit einer Datenbank hergestellt haben, müssen Sie Microsoft SQL Server als Datenquelle auswählen.

    Select Data Source

  • Stellen Sie eine Verbindung mit LocalDB oder SQL Express her, je nachdem, welche Version Sie installiert haben, und geben Sie DatabaseFirst.Blogging als Datenbanknamen ein.

    Sql Express Connection DF

    LocalDB Connection DF

  • Wählen Sie OK aus. Sie werden gefragt, ob Sie eine neue Datenbank erstellen möchten. Wählen Sie Ja aus.

    Create Database Dialog

  • Die neue Datenbank wird nun im Server-Explorer angezeigt. Klicken Sie mit der rechten Maustaste darauf, und wählen Sie Neue Abfrage aus.

  • Kopieren Sie die folgende SQL-Datei in die neue Abfrage, klicken Sie dann mit der rechten Maustaste auf die Abfrage, und wählen Sie Ausführen aus.

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

2. Erstellen der Anwendung

Um die Dinge einfach zu halten, erstellen wir eine einfache Konsolenanwendung, die Database First zum Ausführen des Datenzugriffs verwendet.

  • Öffnen Sie Visual Studio.
  • Datei -> Neu -> Projekt
  • Wählen Sie im linken Menü Windows und Konsolenanwendung aus.
  • Geben Sie DatabaseFirstSample als Namen ein.
  • Klicken Sie auf OK.

 

3. Zurückentwickeln (Reverse Engineering) des Modells

Wir verwenden den Entity Framework-Designer, der als Teil von Visual Studio enthalten ist, um unser Modell zu erstellen.

  • Wählen Sie Projekt > Neues Element hinzufügen... aus.

  • Wählen Sie Daten im linken Menü und dannADO.NET Entity Data Model aus.

  • Geben Sie als Name BloggingModel ein, und klicken Sie auf OK.

  • Dadurch wird der Entity Data Model-Assistent gestartet.

  • Wählen Sie Aus Datenbank generieren aus, und klicken Sie auf Weiter.

    Wizard Step 1

  • Wählen Sie die Verbindung mit der Datenbank aus, die Sie im ersten Abschnitt erstellt haben, geben Sie BloggingContext als Namen der Verbindungszeichenfolge ein, und klicken Sie auf Weiter.

    Wizard Step 2

  • Klicken Sie auf das Kontrollkästchen neben „Tabellen“, um alle Tabellen zu importieren, und klicken Sie auf „Fertig stellen“.

    Wizard Step 3

 

Sobald der Reverse Engineering-Prozess abgeschlossen ist, wird das neue Modell zu Ihrem Projekt hinzugefügt und geöffnet, damit Sie es im Entity Framework Designer anzeigen können. Außerdem wurde Ihrem Projekt eine App.config-Datei mit den Verbindungsdetails für die Datenbank hinzugefügt.

Model Initial

Zusätzliche Schritte in Visual Studio2010

Wenn Sie in Visual Studio 2010 arbeiten, müssen Sie einige zusätzliche Schritte ausführen, um ein Upgrade auf die neueste Version von Entity Framework durchzuführen. Das Upgrade ist wichtig, da es Ihnen Zugriff auf eine verbesserte und benutzerfreundlichere API-Oberfläche bietet und die neuesten Fehlerbehebungen berücksichtigt.

Zunächst müssen wir die neueste Version von Entity Framework von NuGet abrufen.

  • Wählen Sie Projekt > NuGet-Pakete verwalten… aus. Wenn die Option NuGet-Pakete verwalten… nicht angezeigt wird, sollten Sie die neueste Version von NuGet installieren.
  • Wählen Sie die Registerkarte Online aus.
  • Wählen Sie das EntityFramework-Paket aus.
  • Klicken Sie auf Install (Installieren).

Als Nächstes müssen wir unser Modell austauschen, um Code zu generieren, der die DbContext-API verwendet, die in späteren Versionen von Entity Framework eingeführt wurde.

  • Klicken Sie mit der rechten Maustaste auf einen leeren Bereich Ihres Modells in EF Designer, und wählen Sie Codegenerierungselement hinzufügen... aus.

  • Wählen Sie im linken Menü Onlinevorlagen aus, und suchen Sie nach DbContext.

  • Wählen Sie den EF 5.x DbContext-Generator für C# aus, geben Sie BloggingModel als Namen ein, und klicken Sie auf Hinzufügen.

    DbContext Template

 

4. Lesen und Schreiben von Daten

Mit dem Modell können Sie nun auf die Daten zugreifen. Die Klassen, die wir für den Zugriff auf Daten verwenden, werden automatisch basierend auf der EDMX-Datei generiert.

Dieser Screenshot stammt aus Visual Studio 2012. Wenn Sie Visual Studio 2010 verwenden, befinden sich die Dateien „BloggingModel.tt” und „BloggingModel.Context.tt” direkt unter Ihrem Projekt und nicht unter der EDMX-Datei.

Generated Classes DF

 

Implementieren Sie die Main-Methode wie unten dargestellt in „Program.cs“. Dieser Code erstellt eine neue Instanz unseres Kontexts und fügt dann einen neuen Blog ein. Anschließend wird eine LINQ-Abfrage verwendet, um alle Blogs aus der Datenbank abzurufen, die alphabetisch nach „Title“ sortiert sind.

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Sie können die Anwendung jetzt ausführen und testen.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
ADO.NET Blog
Press any key to exit...

 

5. Umgang mit Datenbankänderungen

Jetzt ist es an der Zeit, einige Änderungen an unserem Datenbankschema vorzunehmen. Wenn wir diese Änderungen vornehmen, müssen wir auch das Modell entsprechend aktualisieren.

Der erste Schritt besteht darin, einige Änderungen am Datenbankschema vorzunehmen. Wir werden dem Schema die Tabelle „Users” (Benutzer) hinzufügen.

  • Klicken Sie im Server-Explorer mit der rechten Maustaste auf die Datenbank DatabaseFirst.Blogging, und wählen Sie Neue Abfrage aus.
  • Kopieren Sie die folgende SQL-Datei in die neue Abfrage, klicken Sie dann mit der rechten Maustaste auf die Abfrage, und wählen Sie Ausführen aus.
CREATE TABLE [dbo].[Users]
(
    [Username] NVARCHAR(50) NOT NULL PRIMARY KEY,  
    [DisplayName] NVARCHAR(MAX) NULL
)

Nachdem das Schema aktualisiert wurde, muss jetzt das Modell mit diesen Änderungen aktualisiert werden.

  • Klicken Sie mit der rechten Maustaste auf eine leere Stelle Ihres Modells im EF-Designer, und wählen Sie „Update Model from Database…” (Modell aus Datenbank aktualisieren) aus. Dadurch wird der Update-Assistent gestartet.

  • Aktivieren Sie auf der Registerkarte „Add” (Hinzufügen) des Update-Assistenten das Kontrollkästchen neben „Tables” (Tabellen). Damit wird angegeben, dass wir alle neuen Tabellen aus dem Schema hinzufügen möchten. Auf der Registerkarte „Refresh” (Aktualisieren) werden alle vorhandenen Tabellen im Modell angezeigt, die während des Updates auf Änderungen überprüft werden. Auf den Registerkarten „Delete” (Löschen) werden alle Tabellen angezeigt, die aus dem Schema entfernt wurden und im Rahmen des Updates aus dem Modell entfernt werden. Die Informationen auf diesen beiden Registerkarten werden automatisch erkannt und nur zu Informationszwecken bereitgestellt. Sie können keine Einstellungen ändern.

    Refresh Wizard

  • Klicken Sie im Update-Assistenten auf „Finish” (Fertig stellen).

 

Das Modell wird aktualisiert und enthält nun eine User-Entität, die der Tabelle „Users” zugeordnet ist, die wir der Datenbank hinzugefügt haben.

Model Updated

Zusammenfassung

In dieser exemplarischen Vorgehensweise wurde die Database First-Entwicklung vorgestellt, die es uns ermöglichte, ein Modell im EF-Designer basierend auf einer vorhandenen Datenbank zu erstellen. Anschließend haben wir dieses Modell verwendet, um einige Daten aus der Datenbank zu lesen und zu schreiben. Schließlich haben wir das Modell aktualisiert, um Änderungen widerzuspiegeln, die wir am Datenbankschema vorgenommen haben.