Ich habe eine WPF-App, die dem Model View ViewModel-Muster folgt und das Entity Framework verwendet, um mit einer SQL 2008-Datenbank zu interagieren.Ändern einer Beziehung/eines Fremdschlüssels in Entity Framework - wird nicht beibehalten
Problem:
Mein Problem ist, ich keinen Fremdschlüsselwert in der databse mit EF ändern kann. Ich habe zwei Entitäten: Site und Key. Eine Site kann viele Schlüssel enthalten. Ich möchte einen Key von einer Site zur anderen verschieben. Ich versuche, diese mit dem folgenden Code zu tun:
keyToMove.Site = newSite;
dataAccess.SaveChanges(); // this method just does: this.entities.SaveChanges();
Was ich
Es erscheint im Speicher alles Beobachtet habe, ist fein wie der Rest der App diese Änderung widerspiegelt (die Der Schlüssel erscheint unter der neuen Site). Der Fremdschlüssel in der Datenbank ändert sich jedoch nicht und beim Schließen und Neustarten der App gehen alle Änderungen verloren.
Nach „keyToMove.Site = newSite;“, keyToMove, newSite und die alte Site-Instanz alle einen EntityState Wert von „Unverändert“, das kann nicht richtig sein. Auch SaveChanges gibt 2 zurück, was mich nur noch weiter verwirrt.
Die Setter-Implementierung für die „Site“ Eigenschaft sieht aus wie andere Navigationseigenschaften in meinem Modell:
set
{
((global::System.Data.Objects.DataClasses.IEntityWithRelationships)(this)).RelationshipManager.GetRelatedReference<Site>("CmsModel.SiteKeyAssociation", "Site").Value = value;
}
SQL Profiler zeigt, dass nichts eine UPDATE ähnelt dem db Motor nur dann gesendet wird, wird ein sehr, sehr lange WÄHLEN.
Dinge, die
Die „Key“ Einheit von einer anderen Einheit auswirken kann auf der Grundlage einer Bedingung erbt zu einer der Säulen aufgetragen.
Ich verwende den AutoFac-IOC-Container, um ViewModels zu liefern, die einen Datenzugriff mit einem Verweis auf eine Instanz meiner Datenzugriffsklasse durchführen möchten (im Beispiel "dataAccess").
Eine ObjectContext-Instanz ist ein Mitglied dieser Klasse (in Kommentaren als "this.entities" angezeigt).
Die dataAccess-Instanz ist Singletone Scoped, daher sollte nur eine Instanz unter den View-Modellen e.i geteilt werden. Sowohl "keyToMove" als auch "newSite" sind an denselben Kontext gebunden.
Sorry für die Länge dieses Beitrags, aber ich habe im Ernst keine Ahnung, was hier los ist und ich versuchte, so viele Details wie möglich zur Verfügung zu stellen. Bitte fragen Sie, ob weitere Informationen helfen würden.
Vielen Dank im Voraus.
Debug durch die Eigenschaft Setter in yourModel.Designer.cs und sicher this.ReportPropertyChanged machen() aufgerufen wird. –
Die Setter-Implementierung ähnelt nicht den anderen Navigationseigenschaften, siehe oben. – andrej351
... ugh, schnell aus dem Haar, um hier herauszuziehen, bitte, wenn Sie eine Idee haben, was hier los sein könnte bitte posten – andrej351