Erstellen eines ModellsCreating a Model

Ein EF-Modell speichert die Details zur Zuordnung von Anwendungsklassen und -eigenschaften zu Datenbanktabellen und-spalten.An EF model stores the details about how application classes and properties map to database tables and columns. Es gibt zwei Hauptmöglichkeiten, ein EF-Modell zu erstellen:There are two main ways to create an EF model:

  • Verwenden von Code First: Der Entwickler schreibt Code, um ein Modell zu entwerfen.Using Code First: The developer writes code to specify the model. EF generiert die Modelle und Zuordnungen zur Laufzeit basierend auf Entitätsklassen und zusätzlichen Modellkonfigurationen, die vom Entwickler bereitgestellt werden.EF generates the models and mappings at runtime based on entity classes and additional model configuration provided by the developer.

  • Verwenden des EF-Designers: Der Entwickler zeichnet Felder und Linien, um das Modell mit dem EF-Designer zu entwerfen.Using the EF Designer: The developer draws boxes and lines to specify the model using the EF Designer. Das daraus entstehende Modell wird als XML in einer Datei mit der Erweiterung EDMX gespeichert.The resulting model is stored as XML in a file with the EDMX extension. Die Domänenobjekte der Anwendung werden normalerweise automatisch über das konzeptionelle Modell erzeugt.The application's domain objects are typically generated automatically from the conceptual model.

EF-WorkflowsEF workflows

Beide Ansätze können für die Ausrichtung auf eine vorhandene Datenbank oder die Erstellung einer neuen Datenbank verwendet werden, sodass es vier verschiedene Workflows gibt.Both of these approaches can be used to target an existing database or create a new database, resulting in 4 different workflows. Entscheiden Sie sich für das Modell, das für Sie am geeignetsten ist:Find out about which one is best for you:

Ich möchte Code schreiben...I just want to write code... Ich möchte einen Designer verwenden...I want to use a designer...
Ich erstelle eine neue DatenbankI am creating a new database Verwenden Sie Code First, um Ihr Modell mit Code zu definieren und dann eine Datenbank zu erstellen.Use Code First to define your model in code and then generate a database. Verwenden Sie Model First, um Ihr Modell mit Feldern und Linien zu definieren und dann eine Datenbank zu erstellen.Use Model First to define your model using boxes and lines and then generate a database.
Ich muss auch eine vorhandene Daten zugreifenI need to access an existing database Verwenden Sie Code First, um ein codebasiertes Modell zu erstellen, das eine Zuordnung zu einer bereits vorhandenen Datenbank herstellt.Use Code First to create a code based model that maps to an existing database. Verwenden Sie Database First, um Felder und Linien zu erstellen, die eine Zuordnung zu einer bereits vorhandenen Datenbank herstellen.Use Database First to create a boxes and lines model that maps to an existing database.

Sehen Sie sich ein Video an: Welcher EF-Workflow eignet sich am besten für mich?Watch the video: What EF workflow should I use?

In diesem kurzen Video werden die Unterschiede beschrieben, und Sie erfahren, wie Sie sich für den passenden Workflow entscheiden.This short video explains the differences, and how to find the one that is right for you.

Präsentation:Rowan MillerPresented By: Rowan Miller

Which Workflow Thumb WMV | MP4 | WMV (ZIP)Which Workflow Thumb WMV | MP4 | WMV (ZIP)

Wenn Sie sich das Video angesehen haben und sich dennoch nicht entscheiden können, ob Sie den EF-Designer oder Code First verwenden möchten, können Sie auch einfach beides lernen.If after watching the video you still don't feel comfortable deciding if you want to use the EF Designer or Code First, learn both!

Einblick in die HintergründeA look under the hood

Egal, ob Sie Code First oder den EF-Designer verwenden, besteht ein EF-Modell immer aus mehreren Komponenten:Regardless of whether you use Code First or the EF Designer, an EF model always has several components:

  • Die Domänenobjekte der Anwendung oder die Entitätstypen der Anwendung.The application's domain objects or entity types themselves. Dies wird häufig als Objektebene bezeichnet.This is often referred to as the object layer

  • Ein konzeptionelles Modell besteht aus domänenspezifischen Entitätstypen und -beziehungen, die mit Entity Data Model beschrieben werden.A conceptual model consisting of domain-specific entity types and relationships, described using the Entity Data Model. Diese Ebene wird häufig als Ebene C (Englisch: Conceptual) bezeichnet.This layer is often referred to with the letter "C", for conceptual.

  • Ein Speichermodell, das Tabellen, Spalten und Beziehungen darstellt, wie in der Datenbank definiert.A storage model representing tables, columns and relationships as defined in the database. Diese Ebene wird häufig als Ebene S (Englisch: Storage) bezeichnet.This layer is often referred to with the later "S", for storage.

  • Eine Zuordnung zwischen dem konzeptionellen Modell und dem Datenbankschema.A mapping between the conceptual model and the database schema. Diese Zuordnung wird häufig als C-S-Zuordnung bezeichnet.This mapping is often referred to as "C-S" mapping.

Die EF-Zuordnungs-Engine nutzt die C-S-Zuordnung zum Transformieren von Vorgängen mit Entitäten (z.B. das Erstellen, Lesen, Aktualisieren und Löschen) in entsprechende Vorgänge mit Tabellen in Datenbanken.EF's mapping engine leverages the "C-S" mapping to transform operations against entities - such as create, read, update, and delete - into equivalent operations against tables in the database.

Die Zuordnung zwischen dem konzeptionellen Modell und den Objekten der Anwendung wird häufig als O-C-Zuordnung bezeichnet.The mapping between the conceptual model and the application's objects is often referred to as "O-C" mapping. Im Gegensatz zur C-S-Zuordnung erfolgt die O-C-Zuordnung implizit und 1:1. Entitäten, Eigenschaften und Beziehungen, die im konzeptionellen Modell definiert wurden, müssen mit den Formen und Typen der .NET-Objekte übereinstimmen.Compared to the "C-S" mapping, "O-C" mapping is implicit and one-to-one: entities, properties and relationships defined in the conceptual model are required to match the shapes and types of the .NET objects. Ab EF 4 kann die Objektebene aus einfachen Objekten mit Eigenschaften bestehen, ohne dass Abhängigkeiten von EF vorhanden sind.From EF4 and beyond, the objects layer can be composed of simple objects with properties without any dependencies on EF. Diese werden oft als POCOs (Plain Old CLR Objects) bezeichnet, und die Zuordnung von Typen und Eigenschaften erfolgt basierend auf Konventionen bezüglich der Übereinstimmung von Namen.These are usually referred to as Plain-Old CLR Objects (POCO) and mapping of types and properties is performed base on name matching conventions. In EF 3.5 gab es spezifische Einschränkungen der Objektebene: Entitäten mussten von der Klasse EntityObject abgeleitet werden und EF-Attribute aufweisen, damit die O-C-Zuordnung implementiert werden konnte.Previously, in EF 3.5 there were specific restrictions for the object layer, like entities having to derive from the EntityObject class and having to carry EF attributes to implement the "O-C" mapping.