Entity-Framework, POCO und ein Privateigentum

8

Ich habe die folgende POCO-Klasse erstellt und außerdem die Eigenschaften Contact.FirstName und Contact.LastName privat gemacht (diese Eigenschaften werden entsprechenden Eigenschaften in einem Entity Framework-Modell zugeordnet).

%Vor%

Ich habe erwartet, dass eine Ausnahme auftritt, weil EF diesen beiden Eigenschaften keine Werte zuweisen kann, aber irgendwie hat EF ihnen trotzdem Werte zugewiesen. Wie ist das möglich, da nur Code in Contact class Zugriff auf private Eigenschaften haben sollte?

Danke

    
user702769 12.04.2012, 17:56
quelle

3 Antworten

16

In Umgebungen mit ausreichendem Vertrauensniveau Reflektion kann verwendet werden, um auf Mitglieder zuzugreifen, auf die man normalerweise keinen Zugriff hätte.

    
Kent Boogaart 12.04.2012, 17:59
quelle
1

Aus Gründen der Vollständigkeit: EF5-Code weist zuerst (zumindest standardmäßig) private Eigenschaften einer Datenbanktabellenspalte zu.

Die folgende Klasse:

%Vor%

Mit dem folgenden DbContext:

%Vor%

Erzeugt eine People-Tabelle mit nur einer Spalte: dbo.People.PersonId (PK, int, not null)

Eine Eigenschaft des öffentlichen Schlüssels ist nach den ersten Konventionen des Standardcodes erforderlich. Wenn die Eigenschaft PersonId in der Person-Klasse privat oder geschützt wäre, gibt das Entitätsframework die folgende Ausnahme aus:

%Vor%     
user762846 05.03.2013 13:57
quelle
0
___ qstnhdr ___ Entity-Framework, POCO und ein Privateigentum ___ qstntxt ___

Ich habe die folgende POCO-Klasse erstellt und außerdem die Eigenschaften %code% und %code% privat gemacht (diese Eigenschaften werden entsprechenden Eigenschaften in einem Entity Framework-Modell zugeordnet).

%Vor%

Ich habe erwartet, dass eine Ausnahme auftritt, weil EF diesen beiden Eigenschaften keine Werte zuweisen kann, aber irgendwie hat EF ihnen trotzdem Werte zugewiesen. Wie ist das möglich, da nur Code in %code% class Zugriff auf private Eigenschaften haben sollte?

Danke

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123entityframework ___ Bei Fragen zum ADO.NET Entity Framework die Object-Relational-Mapping (ORM) -Tools für das .NET Framework. Fügen Sie gegebenenfalls auch ein versionsspezifisches Tag hinzu. ___ answer10129136 ___

In Umgebungen mit ausreichendem Vertrauensniveau Reflektion kann verwendet werden, um auf Mitglieder zuzugreifen, auf die man normalerweise keinen Zugriff hätte.

    
___ antwort10129590 ___

Ja - EF, Code zuerst verwenden das an einigen Stellen.

Ich habe ähnliches Verhalten bei privaten Konstruktoren beobachtet - EF / CF kann Ihre Objekte auch dann noch erstellen, wenn Sie es "verstecken" oder versuchen, es zu tun (das war das Verhalten früherer Versionen). bin mir jetzt nicht sicher).

Und ich erinnere mich daran, mit CF-Leuten darüber diskutiert zu haben, warum sie komplexe Eigenschaften nicht initialisieren - sie sind immer noch in Ordnung, wenn sie auf private Mitglieder zugreifen (wenn ich mich recht erinnere), war vor langer Zeit.

Also, ein bisschen allgemeine Frage - aber in diesem Sinne hoffe, dass dies zumindest etwas verdeutlicht.

    
___ tag123poco ___ Bedeutet einfaches altes CLR-Objekt, ein einfaches Objekt, das keinem Objektmodell, keiner Konvention oder keinem Framework folgt. Bei Fragen zur POCO C ++ - Bibliothek (http://pocoproject.org) verwenden Sie bitte [poco-libraries]. ___ answer15225624 ___

Aus Gründen der Vollständigkeit: EF5-Code weist zuerst (zumindest standardmäßig) private Eigenschaften einer Datenbanktabellenspalte zu.

Die folgende Klasse:

%Vor%

Mit dem folgenden DbContext:

%Vor%

Erzeugt eine People-Tabelle mit nur einer Spalte: %code%

Eine Eigenschaft des öffentlichen Schlüssels ist nach den ersten Konventionen des Standardcodes erforderlich. Wenn die Eigenschaft %code% in der Person-Klasse privat oder geschützt wäre, gibt das Entitätsframework die folgende Ausnahme aus:

%Vor%     
___
NSGaga 12.04.2012 18:29
quelle

Tags und Links