Anpassen von Objekten (Entity Framework)
ADO.NET Entity Framework bietet Tools zur automatischen Erstellung einer Objektebene auf Grundlage der CSDL-Datei eines Entitätsdatenmodell (EDM). Diese Datenklassen können je nach Anforderungen Ihrer Anwendung in unterschiedlichem Ausmaß angepasst werden. Sie können auch eigene benutzerdefinierte Datenklassen für die Verwendung mit einem EDM ändern. Dies ist hilfreich, wenn Sie Datenklassen aus einer bestehenden Anwendung für die Verwendung des Entity Framework aktualisieren oder wenn Sie mehr Kontrolle über die Erstellung von Datenklassen wünschen.
Erweitern von partiellen Datenklassen
In einem EDM definierte Typen haben keine verknüpften Methoden wie die Klassen bei objektorientierter Programmierung. Stattdessen enthalten sie ausschließlich im EDM definierte Eigenschaften. Funktionen können Objekten hinzugefügt werden, indem die generierten partiellen Datenklassen erweitert werden. Bei der Generierung von Datenklassen durch die Entitätsdatenmodell-Tools werden diese in partiellen Klassen implementiert. Mit einer partiellen Klasse wird die Definition einer Klasse in zwei oder mehr Quelldateien aufgeteilt. Jede Quelldatei enthält einen Abschnitt der Klassendefinition. Die Abschnitte werden bei der Kompilierung der Anwendung miteinander kombiniert. Weitere Informationen finden Sie unter Partial (Visual Basic) bzw. partial (Typ) (C#-Referenz).
Mit partiellen Klassen haben Sie die Möglichkeit, diese mit benutzerdefinierten Methoden und Eigenschaften in einer separaten Quelldatei zu erweitern, ohne die Anpassungen zu verlieren, wenn die generierten Dateien aktualisiert werden. Weitere Informationen finden Sie unter Gewusst wie: Anpassen von generierten Datenobjekten (Entity Framework).
Benutzerdefinierte Geschäftslogik
Bei der Verwendung generierter Datenklassen kann benutzerdefinierte Geschäftslogik während bestimmter Object Services-Operationen, wie z. B: Änderungen an Eigenschaften oder Beziehungen, aufgerufen werden. Diese Geschäftslogik kann das Erstellen zusätzlicher Validierung oder Protokollierung beim Ändern von Eigenschaften oder beim Aufrufen von SaveChanges umfassen. Sie können benutzerdefinierte Geschäftslogik aufrufen, indem Sie durch Object Services ausgelöste Ereignisse behandeln oder benutzerdefinierte partielle Methoden definieren, die beim Ändern von Eigenschaften aufgerufen werden.
Folgende Ereignisse und Methoden werden zum Aufrufen benutzerdefinierter Geschäftslogik verwendet:
- OnEigenschaftChanging und OnEigenschaftChanged partielle Methoden
Ein Paar partieller Methoden für generierte Datenklassen, die von Object Services aufgerufen werden, wenn eine Eigenschaft geändert wird. Erweitern Sie diese Methoden in partiellen Datenklassen zur Implementierung von Code, der bei Änderung einer Eigenschaft ausgeführt wird. Weitere Informationen finden Sie unter Gewusst wie: Ausführen von Geschäftslogik im Verlauf von Eigenschaftsänderungen (Entity Framework).
- SavingChanges-Ereignis
Ein Ereignis, das ausgelöst wird, wenn im Objektkontext zwischengespeicherte Änderungen in der Datenquelle gespeichert werden sollen. Behandeln Sie dieses Ereignis, um benutzerdefinierte Geschäftslogik zu Beginn einer SaveChanges-Operation zu implementieren. Weitere Informationen finden Sie unter Gewusst wie: Ausführen von Geschäftslogik beim Speichern von Änderungen (Entity Framework).
- OnContextCreated-Methode
Die Entity Data Model-Tools generieren eine partielle OnContextCreated-Methode in der Klasse, die den EntityContainer für das Modell darstellt, und die von der ObjectContext-Klasse erbt. Diese partielle Methode wird immer dann aufgerufen, wenn ein ObjectContext instanziiert wird. Implementieren Sie diese partielle Methode im Code, um einen Handler für das SavingChanges-Ereignis zu registrieren. Weitere Informationen finden Sie unter Gewusst wie: Ausführen von Geschäftslogik beim Speichern von Änderungen (Entity Framework).
- AssociationChanged-Ereignis
Ein Ereignis, das ausgelöst wird, wenn eine Beziehung zwischen zwei Objekten geändert wird. Behandeln Sie dieses Ereignis, um benutzerdefinierte Geschäftslogik zu implementieren, wenn eine Beziehung geändert wird. Weitere Informationen finden Sie unter Gewusst wie: Ändern von Beziehungen zwischen Objekten (Entity Framework).
Benutzerdefinierte Datenklassen
Es gibt Fälle, in denen das Erweitern partieller Klassen durch Hinzufügen von Methoden und Eigenschaften nicht die notwendige Flexibilität bietet. Denken Sie an eine bestehende .NET Framework-Anwendung, die Daten zur Verwendung aus einer Datenbank mittels ADO.NET in CLR-Objekte lädt. Diese Objekte können wichtige Anpassungen und Geschäftslogik enthalten, die in der Objektebene beibehalten werden müssen. Diese Anpassungen könnten Sie daran hindern, die Anwendung für die Verwendung des Entity Framework zu migrieren. Möglicherweise wünschen Sie auch mehr Kontrolle über die Entitätstypen als lediglich die generierten partiellen Klassen zu erweitern.
Die empfohlene Vorgehensweise für die Verwendung benutzerdefinierter Datenklassen mit einem EDM ist das Erben von EntityObject. Wenn das Erben von EntityObject nicht möglich ist, oder wenn eine größere Unabhängigkeit vom Framework erforderlich ist, bietet das Entity Framework einen Satz von Schnittstellen, die zur Verwendung benutzerdefinierter Datenklassen mit einem EDM implementiert werden können. Weitere Informationen finden Sie unter Implementieren von Schnittstellen für benutzerdefinierte Datenklassen (Entity Framework). Bei der Verwendung benutzerdefinierter Datenklassen müssen Sie Attribute für benutzerdefinierte Datenklassen und Eigenschaften festlegen und den Objektkontext über Änderungen an Eigenschaften benachrichtigen.
Erben von EntityObject
Generierte Datenklassen erben von EntityObject oder ComplexObject. Bei der Verwendung benutzerdefinierter Datenklassen mit einem EDM wird empfohlen, die Datenklassen so zu bearbeiten, dass sie von einer dieser beiden Basisklassen erben. Auf diese Weise können für benutzerdefinierte Klassen die von EntityObject bereitgestellten Funktionen zur Änderungsnachverfolgung und Beziehungsverwaltung genutzt werden.
Beim Erben von EntityObject und ComplexObject müssen folgende Punkte beachtet werden:
Klassen- und Eigenschaftsnamen müssen mit den Namen der Entitätstypen und Eigenschaften übereinstimmen, die in der CSDL-Datei des EDM definiert sind. Wenn die Namen nicht übereinstimmen, müssen entweder die Namen der Datenklassen und Eigenschaften geändert oder die Namen in der CSDL- sowie der zugehörigen MSL-Datei aktualisiert werden. Weitere Informationen finden Sie unter Gewusst wie: Anpassen eines Entity Data Model zur Verwendung von benutzerdefinierten Objekten (Entity Framework).
Für jede Eigenschaft des in der CSDL-Datei definierten Entitätstyps muss eine zugehörige Eigenschaft in der benutzerdefinierten Datenklasse vorliegen. Eine benutzerdefinierte Datenklasse kann über zusätzliche Eigenschaften verfügen, die keinen in der CSDL-Datei definierten Eigenschaften zugeordnet sind.
Für benutzerdefinierte Datenklassen und Eigenschaften müssen Attribute festgelegt werden. Diese Attribute sorgen für ein explizites Mapping zwischen Objekten und CSDL. Weitere Informationen finden Sie unter Objekt-Entität-Mappingattribute (Entity Framework) und Gewusst wie: Zuordnen von benutzerdefinierten Objekten zu Entitäten (Entity Framework).
Damit Änderungen an benutzerdefinierten Objekten von Object Services nachverfolgt werden kann, müssen diese Änderungen in einem bestimmten Muster mithilfe der EntityObject-Änderungsberichtsmethoden gemeldet werden. Weitere Informationen finden Sie unter Melden von Änderungen in benutzerdefinierten Datenklassen (Entity Framework).
Entity Framework-Tools generieren auch zusätzliche Klassen, mit denen die Objektprogrammierung vereinfacht wird. Es ist von Vorteil, diesen Code mit benutzerdefinierten Datenklassen zu verwenden. Weitere Informationen finden Sie unter Gewusst wie: Verwenden von Object Services mit benutzerdefinierten Objekten (Entity Framework).
Beim Erben von EntityObject müssen komplexe Typen durch Erben von ComplexObject implementiert werden. Weitere Informationen finden Sie unter Objekte komplexer Typen (Entity Framework).
Im folgenden Beispiel wird die benutzerdefinierte Datenklasse Order definiert, die von EntityObject erbt:
<EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", Name:="Order")> _
Public Class Order
Inherits EntityObject
[EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")]
public class Order : EntityObject
Weitere Informationen finden Sie unter Gewusst wie: Erben von den Basisklassen 'EntityObject' und 'ComplexObject' (Entity Framework).
In diesem Abschnitt
Melden von Änderungen in benutzerdefinierten Datenklassen (Entity Framework)
Implementieren von Schnittstellen für benutzerdefinierte Datenklassen (Entity Framework)
Siehe auch
Weitere Ressourcen
Object Services (Entity Framework)
Arbeiten mit benutzerdefinierten Objekten (Entity Framework-Aufgaben)