In ASP .NET MVC 3 mit Entity Framework zu aktualisieren, habe ich ein Domain-Objekt habe, die eine Navigationseigenschaft Referenzierung andere Objekte haben, wie folge:Wie ein Unternehmens Navigationseigenschaften in Entity Framework
public class Person
{
public String Name {get;set;}
public Guid CompanyID{get;set;}
[ForeignKey(CompanyID)]
public virtual CompanyType Company{ get; set; }
}
Wenn ich erstellen Wenn Sie eine Instanz von Person eingeben und versuchen, sie der Datenbank hinzuzufügen, behält der DBContext einen Cache dieser Entität "Person" bei und sendet ihn an die Datenbank. Später in der Lebensdauer der gleichen Kontextinstanz, wenn ich versuche, auf diese Entität zuzugreifen, ist das Feld Company immer Null, da die Navigationseigenschaft nie aktualisiert wurde.
Gibt es eine Möglichkeit, die Navigationseigenschaft mit dem zu aktualisieren, was in der Datenbank vorhanden ist?
Lazy Laden ist eingeschaltet.
Dazu muss das Programm jede vorhandene Navigationseigenschaft explizit neu laden. Gibt es eine Möglichkeit, etwas Grundlegenderes zu implementieren, um alle Navigationseigenschaften für einen Entitätseintrag neu zu laden? Ich habe die Reload-Funktion für DbEntityEntry versucht, aber das scheint nicht zu funktionieren. – daniely
@daniely: Nein, das ist nicht möglich. Die einzige Möglichkeit mit einem einzelnen DB-Rountrip wäre es, eifriges Laden mit mehreren 'Include's zu verwenden, um alle Navigationseigenschaften zu laden. Dies würde aber auch die übergeordnete Entität laden und Sie müssen die 'Include's für alle Navigationseigenschaften manuell schreiben. – Slauma
@Slauma Bei der Verwendung von context.People.Include (p => p.NavProp1) .Include (p => p.NavProp2) Ich kann mehrere navigaton Eigenschaften kettenladen, die einen einzelnen Treffer in der DB erstellen. Gibt es eine ähnliche Möglichkeit, mehrere Navigationseigenschaften mit context.Entry (person) .Reference (...) zu laden? Ich kann keine Möglichkeit finden, alle Nav-Eigenschaften anzugeben, sodass ich Load() nur einmal aufrufen kann. –