Dieser Artikel wurde maschinell übersetzt.

Datenpunkte

Demystifying Entity Framework-Strategien: Modell erstellen Workflow

Julie Lerman

Julie LermanEine Datenzugriffs Technologie entwickelt, um die Anforderungen der verschiedenen Stilen für Entwicklung und stellt Microsoft Entity Framework Entwickler mit vielen Optionen. Einige dieser Möglichkeiten in einer frühen Phase Ihres Entwicklungszyklus vorgenommen werden müssen, und wirkt sich auf welche Optionen Sie haben weitere zusammen in Ihrem Entwicklungsprozess. In meinem nächsten drei Spalten gebe ich allgemeine Leitlinien für einige der wichtigsten Entscheidungen, die Sie benötigen, um mit dem Entity Framework zu machen:

  • Erstens Modell zuerst oder Datenbank zuerst Workflows zum Erstellen eines konzeptionellen Modells Code
  • Lazy "," explicit "oder" vorzeitige laden
  • Plain Old C#-Objekte (POCOs) oder EntityObjects
  • LINQ to Entities- oder Entity SQL

Es gibt viele weitere Entwurfsentscheidungen in der gesamten Anwendung vorgenommen werden, aber diese Fragen sind die am häufigsten gestellt – und oft debattiert – von Entwicklern sobald sie anfangen zu Entity Framework in vorhandenen oder neuen Anwendungen zu implementieren.

Ich hier den Workflow für das Erstellen den konzeptionellen Modell anzugreifen und umfasst drei Themen in den nächsten beiden Spalten. Mein Ziel ist es, einen allgemeinen Überblick.

Drei Optionen für das Erstellen eines konzeptionellen Modells

Entity Framework stützt sich auf ein konzeptionelles Modell von Ihrer Domäne Entitäten, die ein Entity Data Model (EDM) aufgerufen, und die Auswahl das Erstellen dieses Modells ist der ersten Entscheidung, die Sie benötigen, um zu machen. Es gibt drei separate Workflows zur Auswahl:

  • Der erste Datenbank Workflow beginnt mit einer legacy-Datenbank und nutzt einen Reverse-Engineering, die Datenbank in einem konzeptionellen Modell-Assistenten.
  • Der erste Modell Workflow beginnt mit einer leeren Slate. Sie verwenden den visuellen EDM-Designer ein EDM entworfen und dann Datenbankschema aus diesem Modell zu generieren.
  • Der erste Code Workflow beginnt mit Klassen, die das konzeptionelle Modell beschreiben. Es ist kein visual Modell mit ersten Code verwendet.

Datenbank zuerst: Beginnen Sie mit einer Legacy-Datenbank

In der ersten Iteration von Entity Framework haben wir alle genannten Optionen haben. Die einzige Möglichkeit zum Erstellen eines Modells wurde Reverse-Engineering-Vorgang eine vorhandene Datenbank in einem EDM, die wir als erste Datenbank-Modellierung zu verweisen (Siehe Abbildung 1).

durch Datenbank zunächst Sie Reverse-Engineering-ein Modell aus einer Legacy-Datenbank

Abbildung 1 durch Datenbank zunächst Sie Reverse-Engineering-ein Modell aus einer Legacy-Datenbank

Sie haben wahrscheinlich gesehen, dass dies in vielen Fällen sogar veranschaulicht. Der EDM-Assistent zu öffnen, zeigen Sie auf eine vorhandene Datenbank, wählen Sie Tabellen, Ansichten, gespeicherten Prozeduren und benutzerdefinierten Funktionen, die Sie im Modell dargestellt werden, und klicken Sie auf die Schaltfläche Fertig stellen möchten. Sofort wird ein Modell geboren. Das erste Datenbank Modell beginnt seines Lebens als eine virtuelle Reflektion der Datenbank (oder die Teilmenge der Datenbank, die Sie ausgewählt). Mit keine weitere Bemühungen profitieren Entwickler bereits von Entity Framework. Können Sie stark typisierte Abfragen für dieses Modell und Entity Framework werden die Abfragen ausführen, für Sie und stark typisierte Objekte aus den Ergebnissen zu materialisieren. Dann, während der Arbeit mit den Ergebnissen Entity Framework verfolgt die Änderungen und ermöglicht es Ihnen, diese einfach durch Aufrufen des SaveChanges-Befehls an die Datenbank beibehalten werden.

Alle sein, die einige Entwickler von Entity Framework müssen geht, aber sie sind nicht mit dem einer der großen Vorteile des mit das Modell, das gehört, dass es eher wie in Ihrer Domäne suchen können – die Klassen und Beziehungen, die Ihre Anwendung definieren – als die Datenbank, und keinen Gedanken zum Abrufen von dort zurück auf Ihre Datenbank (das Entity Framework weiterhin für Sie erledigt). Modell-Anpassung ist eine wichtige Funktion des EDM, die viele Entwickler übersehen und nicht zugute kommen. Können Sie Vererbungshierarchien in das Modell einführen, umformen, Entitäten, kombinieren und aufgeteilte Entitäten und vieles mehr.

Mit der ersten Datenbank können Sie das beste aus beiden diese Welten haben: Nutzen Sie die vorhandene Datenbank einen großen Vorsprung mit der Erstellung Ihres Modells abrufen und dann anpassen dieses Modell in der Anwendungsdomäne besser widerspiegeln.

Modellieren zuerst: Beginnen Sie mit Visual-Modell

Sie wird nicht immer eine Legacydatenbank arbeiten. Modell können zunächst das Modell direkt im Designer entwerfen und erstellen Ihr Datenbankschema basierend auf dem Modell. Sie können Ihre Entitäten und ihre Eigenschaften zu erstellen, Definieren von Beziehungen und deren Einschränkungen und Vererbung Hierarchien rechts im Designer zu erstellen. Sie können angeben, welche Eigenschaften Identitätsschlüssel werden soll und auch wenn die Datenbank verantwortlich für deren Werte generiert werden soll (finden Sie unter Abbildung 2).

mit Modell Sie entwerfen Sie zunächst ein Modell, das zum Generieren von Datenbankschemas verwendet wird

Abbildung 2 mit Modell Sie entwerfen Sie zunächst ein Modell, das zum Generieren von Datenbankschemas verwendet wird

Der EDM-Designer "Erstellen von Datenbankmodell" Feature nicht tatsächlich eine Datenbank erstellen. Was wird geschehen ist SQL das Erstellen, wenn ausgeführt, wird das Schema einer Datenbank definieren. Diese SQL-Anweisungen wird als Data Definition Language oder DDL bezeichnet.

Es gibt wenige nicht offensichtlichen Aspekte zu berücksichtigen. Modell wurde erstmals in Visual Studio 2010 und Microsoft.NET Framework 4. Die Create Database-Option wird nicht in Visual Studio 2008 gefunden werden. Darüber hinaus, da es sich um ein neues Feature handelt, müssen Sie sicherstellen, dass die ADO.NET-Datenprovider (z. B. System.Data.Sql) verwendeten wurde aktualisiert, um diese Funktion zu ermöglichen. Der Microsoft SQL Server-Anbieter wurde aktualisiert, für die.NET-4-Version; Einige der Anbieter von Drittanbietern wurden ebenfalls aktualisiert.

Ein Verhalten für vorbereitet werden ist, dass die erste Modell nicht, in der Standardeinstellung inkrementelle Schemaaktualisierungen zu Ihrer Datenbank durchführt. Wenn Sie die Funktion ausführen, erstellt er ein vollständig neues DDL-Skript, das Entfernen und anschließend neu erstellen aller Datenbankobjekte. Externe Tools zur Verfügung, damit das Schema der Datenbank ändern, anstatt es zu überschreiben. Andernfalls sollten Sie zum Sichern von Daten im voraus oder ein Skript schreiben, um die Testdaten jederzeit neu generieren, die Sie verwenden möchten, ändern das Modell und das Schema der Datenbank neu zu erstellen.

Visual Studio bietet einen Erweiterungspunkt in der Datenbank-Generation, die Sie mit Hilfe von den Entity Designer Datenbank Generation Power Pack von Microsoft nutzen können. You can download it from the Visual Studio 2010 Extension Manager or from visualstudiogallery.com. Diese Erweiterung bietet nicht nur eine Möglichkeit für Sie inkrementelle treffen auf die Datenbank mit dem ersten Modell ändert, aber Ihnen die Möglichkeit bieten, ändern Sie die Standardzuordnung für die Tabelle pro Hierarchie Vererbung und sogar Ihre eigene angepassten DDL-Generierungsregeln erstellen.

Zunächst Code: Beginnen Sie mit Code und verzichten Sie ein physisches Modell

Mit der ersten Datenbank und erste Modell erhalten Sie mit einer physischen Darstellung Ihres EDM zusammen mit zusätzlichen Metadaten. Das raw-Format dieses Modells ist XML. Ist in einer Datei mit der Erweiterung Zuordnungsabschnitte von EDMX gespeichert, und Sie können mit ihm arbeiten, im EDM-Designer oder das unformatierte XML. AT-Laufzeit, die Entitätsframework liest diese XML-Daten und erstellt eine speicherresidente Darstellung des Modells mit spezialisierte Klassen, die die Metadaten darstellen – Entitäten, Beziehungen und So weiter. Die Entity Framework-Laufzeit arbeitet mit diesen Objekten, nicht die tatsächlichen XML-Datei. Diese Metadaten ist besonders wichtig, wenn das Entity Framework muss Modell Abfragen in Datenbankabfragen, Datenbankergebnissen in Entitätsinstanzen, Transformieren und Datenbankbefehle für Einfügungen, Aktualisierungen und Löschungen zu erstellen. Visual Studio generiert die Domäne-Klassen aus der XML-Code in Ihrer Anwendung verwenden.

Das Entity Framework-Team hat eine Möglichkeit, die erforderlichen Metadatenobjekte zur Laufzeit zu erstellen, ohne dass eine physische Zuordnungsabschnitte von EDMX-Datei haben Sie die ausdenken. Dies ist der Power hinter der dritten Modellerstellung Workflow für das Entity Framework, der erste Code aufgerufen. Mit Code zuerst erstellen, anstatt ein EDM erstellen Sie Ihre Domäne Klassen wie bei jeder anderen.NET-Entwicklung. Zur Laufzeit werden Entity Framework untersuchen Sie diese Klassen und, mithilfe einer Reihe von Standardkonventionen, erstellen ein Speichermodell, mit denen die Entity Framework-Laufzeit zusammenarbeiten kann. Da Klassen immer natürlich die Informationen wird nicht, dass Entity Framework, benötigt um dieses Modell zu erstellen, können Sie zusätzliche Konfiguration (mithilfe von Anmerkungen deklarative Attribute/Daten oder im Code mithilfe einer fluent API) bieten zusätzlich das Modell, überschreiben die zuvor erwähnten Übereinkommen zu beschreiben. Konfiguration können für eine Vielzahl von Modellaufgaben Identifizieren von Primärschlüsseln, die erste Code Konventionen für die Feinabstimmung Beziehungen nicht entsprechen oder sogar angeben, wie eine Vererbungshierarchie dargestellt werden sollen.

Wie Modell erste Code zuerst die Vermutung, die Sie beginnen mit einer legacy-Datenbank werden nicht standardmäßig und bietet die Möglichkeit, diese Datenbank aus dem hergeleiteten Modell zu erstellen. Im Gegensatz zur ersten Modell können Sie die Datenbankdatei als auch das Schema erstellen. Mit der ersten Code fehlen Sie immer noch eine Möglichkeit, die Daten der Datenbank beibehalten werden, wenn Sie das Modell anpassen und erstellen Sie die Datenbank neu. Erste Code muss jedoch Unterstützung zum Erkennen von Unterschieden im Modell und der Datenbank sowie das Seeding der Datenbank mit Daten mithilfe von Datenbank-Initialisierungen.

Sie können auch Code zuerst mit einer vorhandenen Datenbank verwenden. Wenn die Klassen- und Eigenschaftennamen in der Datenbank entsprechen nicht, können Sie Daten Anmerkungen oder Konfiguration über die fluent-API, die Überwindung hinzufügen. Abbildung 3 zeigt eine Klasse mit Attributen, die erzwingen, wird Code zuerst Zuordnungen, um die richtigen Tabelle und Eigenschaftennamen bereitstellen, obwohl die Klasse und die Felder nicht genau übereinstimmen.

Abbildung 3 eine Klasse mit dem ersten CodeAttribute, damit die Klasse kann zu einer vorhandenen Tabelle korrekt zuordnen

[Table("SalesOrderDetail", SchemaName="SalesLT")]
  public partial class Detail
  {
    // Scalar properties

    [Column(Name = "SalesOrderID")]
    public int OrderId { get; set; }
    [Column(Name = "SalesOrderDetailID")]
    public int DetailId { get; set; }
    public short OrderQty { get; set; }
    public int ProductId { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal UnitPriceDiscount { get; set; }

    public decimal LineTotal { get; set; }
    public System.DateTime ModifiedDate { get; set; }

    // Navigation properties

    public virtual Product Product { get; set; }
    public virtual Order Order { get; set; }
  }

Eine Entscheidungsstruktur

Das Entity Framework wurde weiterentwickelt, um Unterstützung einer Vielzahl von Entwicklung-Formate, sondern diese erzwingt jetzt uns mit den Optionen zum Auswählen des richtigen Ansatzes vertraut sein. Wenn Sie möchten um eine Benutzeroberfläche für Ihr Modell zu verwenden, haben dann Sie die EDM-Designer verfügbar, ob Sie beginnend mit einer vorhandenen Datenbank oder mithilfe die Option erste Modell. Selbst dann noch können die Modellierer Sie Hilfe stellen eine Stake in den Boden und dann ein Vorlage verwenden, um Code ersten Klassen erstellen, und legen Sie das visual-Modell. Wenn Sie dreht sich alles um den Code, und es vorziehen, nicht an eine Zuordnungsabschnitte von EDMX-Datei oder den visual Modeler gebunden werden, erste Code wird Sie interessieren, (finden Sie unte Abbildung 4).

Entscheidungsbaum

Abbildung 4 Entscheidungsbaum

Starten auf dem richtigen Weg

Welches Modeling-Technik, die Sie wählen – erste Datenbank, erste Modell oder Code ersten – Wenn Sie ein Modell erstellt haben, wird nicht Sie einen Unterschied bemerken, wenn Sie beginnen, Abfragen, Interaktion mit und Beibehalten von Entitäten, die mit die Entity Framework-Laufzeit über die Model-Klassen. Und es ist möglich mit einem Workflow und Switch zu einem anderen. Sie können eine mithilfe der Vorlage DbContext-Codegenerierung Zuordnungsabschnitte von EDMX Code ersten Klassen erstellen. Und obwohl es nicht ganz so einfach ist, können Sie auch eine Zuordnungsabschnitte von EDMX aus Code ersten Klassen erstellen.

Ich habe eine allgemeine Übersicht über die Optionen bereitgestellt, was könnten Sie übereinander wählen Laufwerk und Entmystifizierung hoffentlich ich habe von einige der Optionen für Sie.

In zukünftigen Spalten, werde ich zu großen Entscheidungen, die Sie in den Entity Framework-Anwendungen, die am Anfang dieses Artikels erwähnt konfrontiert werde: Auswählen einer Strategie für die Codegenerierung für EntityObjects oder POCOs, Laden von Daten mithilfe von eager, verzögerte oder explizites Laden im Zusammenhang, und mithilfe von LINQ to Entities- oder Entity SQL-Abfragen zu schreiben.

Julie Lerman  ist als Microsoft MVP, .NET-Mentor und Unternehmensberaterin tätig und wohnt in den Bergen von Vermont. Sie hält bei User Groups und Konferenzen in der ganzen Welt Vorträge zum Thema Datenzugriff und anderen Microsoft .NET-Themen. She Blogs unter thedatafarm.com/blog und ist der Autor die hoch gelobte Buch "Programming Entity Framework" (O' Reilly Media, 2010). Folgen Sie ihm auf Twitter unter twitter.com/julielerman.

Dank an den folgenden technischen Experten für die Überprüfung dieses Artikels: Tim Laverty