Arbeiten mit Objekten (Entity Framework)
Mit Entity Framework können Sie Daten in Form von typisierten CLR-Objekten (Common Language Runtime), bei denen es sich um Instanzen von Entitätstypen handelt, abfragen, einfügen, aktualisieren und löschen. Die Entitätstypen entsprechen den im konzeptionellen Modell definierten Entitäten. In Entity Framework werden Entitäten und Beziehungen zugeordnet, die in einem konzeptionellen Modell für eine Datenquelle definiert werden. Entity Framework stellt Funktionen bereit, mit denen die folgenden Schritte durchgeführt werden können: Materialisieren der von der Datenquelle als Objekte zurückgegebenen Daten, Nachverfolgen von Änderungen an den Objekten, Behandeln der Parallelität, Zurückgeben von Objektänderungen an die Datenquelle und Binden von Objekte an Steuerelemente. Sie können mithilfe von LINQ to Entities, Entity SQL-Sprache oder Abfrage-Generator-Methoden (Entity Framework) Abfragen für das konzeptionelle Modell durchführen. Weitere Informationen finden Sie unter Abfragen eines konzeptionellen Modells (Entity Framework).
Bei der ObjectContext-Klasse handelt es sich um die primäre Klasse für die Interaktion mit Entitätsobjekten. Eine Instanz der ObjectContext-Klasse kapselt folgende Elemente: eine Verbindung zur Datenbank, Metadaten, mit denen das Modell beschrieben wird, und ein ObjectStateManager-Objekt das Objekte bei Erstellungs-, Aktualisierungs- und Löschvorgängen nachverfolgt. Weitere Informationen finden Sie unter Identitätsauflösung, Zustandsverwaltung und Änderungsnachverfolgung (Entity Framework).
Entity Framework stellt Tools für das automatische Erstellen einer Objektebene entsprechend dem konzeptionellen Modell zur Verfügung. Die Objektebene beinhaltet Entitätstypen und Objektkontextdefinitionen. Die Objektkontextdefinition enthält eine vom ObjectContext abgeleitete Klasse, die in der Regel über eine Reihe von Eigenschaften verfügt, die eine Auflistung von Entitäten des angegebenen Typs zurückgeben. Um den Code auf Objektebene zu generieren, verwenden Sie den Entity Data Model Designer (Entity Designer) oder das Befehlszeilentool EdmGen.exe. Weitere Informationen finden Sie unter Generated Code Overview.
Entitätstypen
In Entity Framework können Sie Entitätstypen verwenden, die von EntityObject abgeleitet werden. Dies gilt auch für herkömmliche CLR-Objekttypen (POCO), POCO-Proxytypen und Entitätstypen mit Selbstnachverfolgung. In den folgenden Abschnitten finden Sie Informationen, die Ihnen dabei helfen sollen, sich für eine für die jeweilige Anwendung geeignete Option zu entscheiden.
EntityObject
In der Standardeinstellung generieren die ADO.NET Entity Data Model -Tools von EntityObject abgeleitete Entitätstypen. Bei der Verwendung der von EntityObject abgeleiteten Typen verwaltet der Objektkontext die Beziehungen zwischen den Objekten. Zudem werden Änderungen in Echtzeit nachverfolgt und Lazy Loading effizient unterstützt. Die von EntityObject abgeleiteten Typen sind jedoch stark abhängig von Entity Framework . Bei der Verwendung von Architekturen, die das Ignorieren von Dauerhaftigkeit erfordern (z. B. bei der test- oder domänengesteuerten Entwicklung), oder wenn Domänenklassen vorhanden sind, sollten POCO oder POCO-Proxys verwendet werden.
POCO
Entity Framework ermöglicht es Ihnen, vorhandene Domänenobjekte zusammen mit dem Datenmodell zu verwenden, ohne Änderungen an den Datenklassen vornehmen zu müssen. Diese POCO-Datenklassen (auch als Dauerhaftigkeit ignorierende Objekte bezeichnet) unterstützen meist das gleiche Abfrage-, Einfüge-, Aktualisierungs- und Löschverhalten wie die mit den Entity Data Model -Tools erstellten Entitätstypen.
Bei der Verwendung von POCO-Typen werden am Objektdiagramm vorgenommene Änderungen von Entity Framework nicht automatisch in Echtzeit nachverfolgt. Mithilfe von Momentaufnahmen stellt Entity Framework Änderungen an den Objekten fest. Rufen Sie DetectChanges auf, um den Objektkontext mit dem Diagramm zu synchronisieren. In der Standardeinstellung ruft der Objektkontext diese Methode vor dem Speichern der Daten in der Datenquelle auf. Dies erfordert mehr Arbeitsspeicher als sofortige Benachrichtigungen. Daher kann die Systemleistung insbesondere dann beeinträchtigt werden, wenn die Anwendung häufige Änderungen erkennen soll. Weitere Informationen finden Sie unter Verfolgen von Änderungen in POCO-Entitäten (Entity Framework). Um sofortige Benachrichtigungen zu unterstützen, aktivieren Sie das Erstellen von Proxyobjekten für die Änderungsnachverfolgung.
Wenn Lazy Loading verwendet werden soll, müssen Sie die Lazy Loading-Proxyerstellung aktivieren. Weitere Informationen finden Sie unten im Abschnitt über den POCO-Proxy.
POCO-Proxy
Verwenden Sie POCO-Proxys, wenn eine hocheffiziente und unmittelbare Änderungsnachverfolgung sowie Lazy Loading erforderlich ist. Bei der Verwendung von Proxys stehen die gleichen Funktionen zur Verfügung wie bei vom EntityObject abgeleiteten Typen. Die Domänenklassen werden jedoch weiterhin von Entity Framework getrennt. Um einen Lazy Loading-Proxy und/oder die Proxyerstellung für die sofortige Änderungsnachverfolgung zu aktivieren, müssen die POCO-Klassen die im Thema Anforderungen für die Erstellung von POCO-Proxys (Entity Framework) beschriebenen Anforderungen erfüllen.
Proxys werden während der Laufzeit erstellt und erben von POCO-Typen. Daher unterscheidet sich der Laufzeittyp der Entitäten vom POCO-Typ. Dadurch entstehen verschiedene Komplikationen bei der Serialisierung. Weitere Informationen finden Sie unter Arbeiten mit POCO-Entitäten (Entity Framework). Beachten Sie den Mehraufwand beim Erstellen von Proxytypen im Vergleich zu POCO-Typen.
Entitäten mit Selbstnachverfolgung
Die von EntityObject abgeleiteten Typen, POCO- und POCO-Proxytypen sind für Anwendungen sinnvoll, in denen Entitätsobjekte an den Objektkontext angefügt werden können, der die Änderungsnachverfolgung behandelt. Wenn jedoch vollständige Diagramme von Entitäten auf eine Ebene übertragen werden müssen, in der der Objektkontext nicht verfügbar ist, muss festgelegt werden, wie Änderungen nachzuverfolgen und diese Änderungen an den Objektkontext zurückzumelden sind. Die Entitäten mit Selbstnachverfolgung können ab .NET Framework 4 Änderungen an skalaren, komplexen und Navigationseigenschaften aufzeichnen. Entitäten mit Selbstnachverfolgung hängen nicht von Entity Framework ab. Die Vorlage für den ADO.NET-Entitäts-Generator mit Selbstnachverfolgung generiert Entitäten mit Selbstnachverfolgung. Weitere Informationen finden Sie unter Arbeiten mit Entitäten mit Selbstnachverfolgung.
Überlegungen zur Leistung
Die folgenden Überlegungen zur Leistung sind möglicherweise bei der Auswahl der für Ihre Anwendung geeigneten Objekttypen hilfreich.
Beim Laden von Metadaten ist der Aufwand für das Ermitteln von POCO- oder Proxytypen größer als beim Ermitteln von attributierten, von EntityObject abgeleiteten Typen.
Beim Generieren dynamischer POCO-Proxytypen entsteht ein gewisser Mehraufwand.
Beim Initialisieren von POCO-Typen entsteht im Vergleich zu Proxy- und von EntityObject abgeleiteten Typen der geringste Mehraufwand.
Die Nachverfolgung von POCO-Momentaufnahmen ist aufwändiger als die Nachverfolgung mit sofortiger Benachrichtigung.
In diesem Abschnitt
Objekte komplexer Typen (Entity Framework)
Definieren und Verwalten von Beziehungen (Entity Framework)
Erstellen, Hinzufügen, Ändern und Löschen von Objekten (Entity Framework)
Anfügen und Trennen von Objekten (Entity Framework)
Identitätsauflösung, Zustandsverwaltung und Änderungsnachverfolgung (Entity Framework)
Verwalten von Verbindungen und Transaktionen (Entity Framework)
Speichern von Änderungen und Verwalten von Parallelität (Entity Framework)
Binden von Objekten an Steuerelemente (Entity Framework)
Arbeiten mit Entitätsschlüsseln (Entity Framework)
Serialisieren von Objekten (Entity Framework)
Arbeiten mit ObjectSet (Entity Framework)
Anpassen von Objekten (Entity Framework)
Siehe auch
Konzepte
Abfragen eines konzeptionellen Modells (Entity Framework)
Schnellstart (Entity Framework)