Model First

Dieses Video und eine schrittweise exemplarische Vorgehensweise bieten eine Einführung in die Database First-Entwicklung mit Entity Framework. Modell First ermöglicht es Ihnen, ein neues Modell mit dem Entity Framework-Designer zu erstellen und dann ein Datenbankschema aus dem Modell zu generieren. Das Modell wird in einer EDMX-Datei (.edmx) 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 und eine schrittweise exemplarische Vorgehensweise bieten eine Einführung in die Database First-Entwicklung mit Entity Framework. Modell First ermöglicht es Ihnen, ein neues Modell mit dem Entity Framework-Designer zu erstellen und dann ein Datenbankschema aus dem Modell zu generieren. Das Modell wird in einer EDMX-Datei (.edmx) 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 für diese exemplarische Vorgehensweise Visual Studio 2010 oder Visual Studio 2012 installiert haben.

Wenn Sie Visual Studio 2010 verwenden, müssen Sie auch NuGet installiert haben.

1. Erstellen der Anwendung

Erstellen Sie eine einfache Konsolenanwendung, die Model First für den Datenzugriff verwendet:

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

2. Erstellen des Modells

Wir verwenden den Entity Framework-Designer, der in 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 dann ADO.NET Entity Data Model aus.

  • Geben Sie BloggingModel als Namen ein, und klicken Sie auf OK. Dadurch wird der Entity Data Model-Assistent gestartet.

  • Wählen Sie Leeres Modell aus, und klicken Sie auf Fertig stellen.

    Create Empty Model

Der Entity Framework-Designer wird mit einem leeren Modell geöffnet. Jetzt können wir mit dem Hinzufügen von Entitäten, Eigenschaften und Zuordnungen zum Modell beginnen.

  • Klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Eigenschaften aus.

  • Ändern Sie im Eigenschaftenfenster den Entitätscontainernamen in BloggingContext. Dies ist der Name des abgeleiteten Kontexts, der für Sie generiert wird. Der Kontext stellt eine Sitzung mit der Datenbank dar, sodass wir Daten abfragen und speichern können.

  • Klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Neu hinzufügen > Entität... aus.

  • Geben Sie Blog- als Entitätsnamen ein und BlogId als Schlüsselnamen ein, und klicken Sie auf OK.

    Add Blog Entity

  • Klicken Sie mit der rechten Maustaste auf die neue Entität auf der Entwurfsoberfläche, wählen Sie Neu hinzufügen > Skalare Eigenschaft aus, und geben Sie Name als Namen der Eigenschaft ein.

  • Wiederholen Sie diesen Vorgang, um eine Url-Eigenschaft hinzuzufügen.

  • Klicken Sie mit der rechten Maustaste auf die Eigenschaft Url auf der Entwurfsoberfläche, wählen Sie Eigenschaften aus, und ändern Sie im Eigenschaftenfenster die Einstellung Nullwerte zulassend in true. Dadurch können wir einen Blog in der Datenbank speichern, ohne ihm eine URL zuzuweisen.

  • Fügen Sie mithilfe der soeben gelernten Techniken eine Post-Entität mit einer PostId-Schlüsseleigenschaft hinzu.

  • Fügen Sie die skalaren Eigenschaften Title und Content zur Entität Post hinzu.

Da wir nun über ein paar Entitäten verfügen, ist es an der Zeit, eine Zuordnung (oder Beziehung) zwischen ihnen hinzuzufügen.

  • Klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Neu hinzufügen > Zuordnung... aus.

  • Ein Ende der Beziehung muss mit einer Multiplizität von 1 auf Blog zeigen, und das andere Ende muss mit einer Multiplizität von n auf Post zeigen.Das bedeutet, dass ein Blog viele Beiträge enthält, und jeder Beitrag zu einem Blog gehört.

  • Stellen Sie sicher, dass das Kontrollkästchen Fremdschlüsseleigenschaften zu Entität „Post“ hinzufügen aktiviert ist, und klicken Sie auf OK.

    Add Association MF

Wir verfügen jetzt über ein einfaches Modell, aus dem wir eine Datenbank generieren und diese zum Lesen und Schreiben von Daten verwenden können.

Model Initial

Zusätzliche Schritte in Visual Studio 2010

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

3. Generieren der Datenbank

Auf Grundlage unseres Modells kann Entity Framework ein Datenbankschema berechnen, mit dem wir Daten mithilfe des Modells speichern und abrufen 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.

  • Klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Datenbank aus Modell… aus.

  • Klicken Sie auf Neue Verbindung…, und legen Sie entweder „LocalDB“ oder „SQL Express“ fest, je nachdem, welche Version von Visual Studio Sie verwenden. Geben Sie ModelFirst.Blogging als Datenbanknamen ein.

    LocalDB Connection MF

    Sql Express Connection MF

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

  • Wählen Sie Weiter aus. Der Entity Framework-Designer berechnet dann ein Skript zum Erstellen des Datenbankschemas.

  • Sobald das Skript angezeigt wird, klicken Sie auf Fertig stellen. Das Skript wird dann Ihrem Projekt hinzugefügt und geöffnet.

  • Klicken Sie mit der rechten Maustaste auf das Skript, und wählen Sie Ausführenaus. Sie werden dann aufgefordert, die Datenbank anzugeben, mit der eine Verbindung hergestellt werden soll. Geben Sie „LocalDB“ oder „SQL Server Express“ an, je nachdem, welche Version von Visual Studio Sie verwenden.

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

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 Modelländerungen

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

Wir beginnen mit dem Hinzufügen einer neuen Benutzerentität zu unserem Modell.

  • Fügen Sie eine neue Entität namens User mit Username als Schlüsselname und Zeichenfolge als Eigenschaftstyp für den Schlüssel hinzu.

    Add User Entity

  • Klicken Sie mit der rechten Maustaste auf die Eigenschaft Username auf der Entwurfsoberfläche, und wählen Sie Eigenschaftenaus. Ändern Sie im Eigenschaftenfenster die Einstellung MaxLength auf 50. Dadurch werden die Daten, die im Benutzernamen gespeichert werden können, auf 50 Zeichen beschränkt.

  • Fügen Sie die skalare Eigenschaft DisplayName zur Entität User hinzu.

Wir besitzen jetzt ein aktualisiertes Modell und sind bereit, die Datenbank so zu aktualisieren, dass der neue Entitätstyp „User“ berücksichtigt wird.

  • Klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Datenbank aus Modell generieren... aus. Entity Framework berechnet ein Skript, um ein Schema basierend auf dem aktualisierten Modell neu zu erstellen.
  • Klicken Sie auf Fertig stellen.
  • Möglicherweise werden Warnungen angezeigt, dass das vorhandene DDL-Skript und die Zuordnungs- und Speicherkomponenten des Modells überschrieben werden. Klicken Sie in beiden Warnungen auf Ja.
  • Das aktualisierte SQL-Skript zum Erstellen der Datenbank wird für Sie geöffnet.
    Das generierte Skript verwirft alle vorhandenen Tabellen und erstellt dann das Schema von Grund auf neu. Dieser Ansatz kann für die lokale Entwicklung funktionieren, ist aber nicht für das Pushen von Änderungen an einer Datenbank geeignet, die bereits bereitgestellt wurde. Wenn Sie Änderungen in einer Datenbank veröffentlichen müssen, die bereits bereitgestellt wurde, müssen Sie das Skript bearbeiten oder ein Schemaabgleichstool verwenden, um ein Migrationsskript zu berechnen.
  • Klicken Sie mit der rechten Maustaste auf das Skript, und wählen Sie Ausführenaus. Sie werden dann aufgefordert, die Datenbank anzugeben, mit der eine Verbindung hergestellt werden soll. Geben Sie „LocalDB“ oder „SQL Server Express“ an, je nachdem, welche Version von Visual Studio Sie verwenden.

Zusammenfassung

In dieser exemplarischen Vorgehensweise haben wir uns mit der Model First-Entwicklung befasst, die es uns ermöglichte, ein Modell in EF Designer zu erstellen und dann eine Datenbank aus diesem zu generieren. Anschließend haben wir das Modell verwendet, um einige Daten aus der Datenbank zu lesen und zu schreiben. Schließlich haben wir das Modell aktualisiert und dann das Datenbankschema neu erstellt, damit dieses dem Modell entspricht.