Anforderungen für die Erstellung von POCO-Proxys (Entity Framework)

Entity Framework unterstützt POCO-Klassen ("einfache alte" CLR-Objekte). Wenn Sie Lazy Loading für POCO-Entitäten aktivieren, und Entity Framework Änderungen in den Klassen jeweils dann nachverfolgen soll, wenn die Änderungen auftreten, müssen die POCO-Klassen die in diesem Thema beschriebenen Anforderungen erfüllen, damit Entity Framework während der Laufzeit Proxys für die POCO-Entitäten erstellen kann. Die Proxyklassen werden von den POCO-Typen abgeleitet.

Anforderungen an die Klassendefinition

Entity Framework erstellt Proxys für POCO-Entitäten, wenn die Klassen die unten beschriebenen Anforderungen erfüllen. POCO-Entitäten können über Proxyobjekte verfügen, die Änderungsnachverfolgung oder Lazy Loading unterstützen. Sie können Proxys mit Lazy Loading definieren, ohne die Anforderungen für Proxys mit Änderungsnachverfolgung zu erfüllen, aber wenn Sie die Anforderungen für einen Proxy mit Änderungsnachverfolgung erfüllen, dann wird auch der Lazy Loading-Proxy erstellt. Sie können Lazy Loading deaktivieren, indem Sie für die LazyLoadingEnabled-Option den Wert false festlegen.

Für jeden dieser zu erstellenden Proxys gilt:

  • Eine benutzerdefinierte Datenklasse mit öffentlichem Zugriff muss deklariert werden.

  • Eine benutzerdefinierte Datenklasse darf nicht sealed (NotInheritable in Visual Basic) sein.

  • Eine benutzerdefinierte Datenklasse darf nicht abstract (MustInherit in Visual Basic) sein.

  • Eine benutzerdefinierte Datenklasse muss über einen public-Konstruktor oder einen protected-Konstruktor ohne Parameter verfügen. Verwenden Sie einen protected-Konstruktor ohne Parameter, wenn die CreateObject-Methode zum Erstellen eines Proxys für die POCO-Entität verwendet werden soll. Ein Aufruf der CreateObject-Methode garantiert nicht, dass der Proxy erstellt wird: die POCO-Klasse muss auch den anderen, in diesem Thema beschriebenen Anforderungen entsprechen.

  • Die Klasse kann weder die IEntityWithChangeTracker-Schnittstelle noch die IEntityWithRelationships-Schnittstelle implementieren, da die Proxyklassen diese Schnittstellen implementieren.

  • Die ProxyCreationEnabled-Option muss auf true festgelegt werden.

Für Lazy Loading-Proxys gilt:

  • Jede Navigationseigenschaft muss als public, virtual (Overridable in Visual Basic) deklariert werden und der get-Accessor darf nicht als sealed (NotOverridable in Visual Basic) deklariert sein. Die in der benutzerdefinierten Datenklasse definierte Navigationseigenschaft muss über eine entsprechende Navigationseigenschaft im konzeptionellen Modell verfügen. Weitere Informationen dazu finden Sie unter Laden von verknüpften POCO-Objekten (Entity Framework).

Für Proxys mit Änderungsnachverfolgung gilt:

  • Jede Eigenschaft, die einer Eigenschaft eines Entitätstyps im Datenmodell zugeordnet ist, muss über get- und set-Accessoren verfügen, die nicht als sealed (NotOverridable in Visual Basic), aber als public und virtual (Overridable in Visual Basic) deklariert sind.

  • Eine Navigationseigenschaft, die das "n"-Ende einer Beziehung darstellt, muss einen Typ zurückgeben, der ICollection implementiert, wobei T der Typ des Objekts am anderen Ende der Beziehung ist.

  • Wenn der Proxytyp zusammen mit dem Objekt erstellt werden soll, dann verwenden Sie zur Erstellung eines neuen Objekts die CreateObject-Methode von ObjectContext statt des new-Operators.

Wenn Sie während der Laufzeit ermitteln müssen, ob eine POCO-Entität ein Proxy ist, führen Sie die in Gewusst wie: Erkennen, dass eine POCO-Entität ein Proxy ist (Entity Framework) beschriebenen Schritte aus.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Serialisieren von POCO-Proxys mit WCF (Entity Framework)

Konzepte

Arbeiten mit POCO-Entitäten (Entity Framework)
Verfolgen von Änderungen in POCO-Entitäten (Entity Framework)