Ich verwende DBContext und habe zwei Klassen, deren Eigenschaften alle virtuell sind. Ich kann im Debugger sehen, dass ich ein Proxy-Objekt bekomme, wenn ich den Kontext abfrage. Eine Auflistungseigenschaft ist jedoch immer noch null, wenn ich versuche, sie hinzuzufügen. Ich dachte, dass der Proxy sicherstellen würde, dass die Sammlung initialisiert wird. Warum ist die erste Proxy-Sammlung meines Entity Framework-Codes ungültig und warum kann ich sie nicht festlegen?
Weil mein Poco Objekt außerhalb seiner Datenkontext verwendet werden, habe ich einen Scheck für die Sammlung im Konstruktor null zu sein und schaffen es, falls erforderlich:
public class DanceStyle
{
public DanceStyle()
{
if (DanceEvents == null)
{
DanceEvents = new Collection<DanceEvent>();
}
}
...
public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
, die außerhalb des Datenkontext funktioniert, aber wenn Ich erhalte ein Objekt mit einer Abfrage, obwohl der Test wahr ist, wenn ich versuche, es zu setzen, bekomme ich folgende Ausnahme: 'Die Eigenschaft' DanceEvents 'vom Typ' DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94 'kann nicht gesetzt werden, da die Sammlung bereits auf eine EntityCollection gesetzt ist. "
Ich kann sehen, es ist null und ich kann nicht hinzufügen, aber auch kann ich es auf eine Sammlung festlegen, weil der Proxy sagt, dass es bereits festgelegt ist. Deshalb kann ich es nicht benutzen. Ich bin verwirrt. Hier
ist die DanceEvent Klasse:
public class DanceEvent
{
public DanceEvent()
{
if (DanceStyles == null)
{
DanceStyles = new Collection<DanceStyle>();
}
}
...
public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
ich die anderen Wert-Typ-Eigenschaften aus dem obigen Code weggelassen. Ich habe keine anderen Zuordnungen für diese Klassen in der Kontextklasse.
Das ist eine andere Möglichkeit, aber es erklärt nicht meinen Kommentar: "Das funktioniert außerhalb des Datenkontexts, aber wenn ich ein Objekt mit einer Abfrage abrufen, obwohl der Test wahr ist, wenn ich versuche, es zu setzen, ich bekomme folgende Ausnahme: 'Die Eigenschaft' DanceEvents 'vom Typ' DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94 'kann nicht gesetzt werden, da die Sammlung bereits auf eine EntityCollection gesetzt ist.' Ich kann sehen, dass es null ist und ich kann es nicht hinzufügen, aber ich kann es auch nicht auf eine Sammlung setzen, weil der Proxy sagt, dass es bereits gesetzt ist. Deshalb kann ich es nicht benutzen. Ich bin verwirrt. " –
Ich kann nicht wiedergeben, was Sie beschreiben. Wenn die Entität als ein Proxy instanziiert wird (entweder als Ergebnis davon, dass sie von einer Abfrage zurückgegeben wird oder wenn die DbSet.Create-Methode verwendet wird), werden die Auflistungseigenschaften meiner Instanz mit EntityCollection-Objekten instanziiert. Sie sollten diese Eigenschaften niemals festlegen müssen - fügen Sie einfach Entitäten von ihnen hinzu oder entfernen Sie sie. – Pando
Es ist möglich, dass sich das Verhalten geändert hat, seit ich meine Frage vor zwei Jahren geschrieben habe. –