Frage

Als Ergebnis eines Formulars Post, ich versuche, eine neue Marke Datensatz zu speichern. Aus meiner Sicht ist Gender ein Drop-Down, eine Integer Rückkehr, die von Viewdata aufgefüllt wird ( „gender“)

Ich habe mein Setup Link wie folgt:

gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()

Welche ergibt sich folgende Fehler.

Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.

Könnte jemand die Parameter in einfachem Englisch mir erklären. Ich habe auch als erste Parameter, aber keine Freude versucht DB.Gender.

War es hilfreich?

Lösung

Anstatt eine EntityKey Erzeugen eines Stub-Objekt erstellen Geschlecht (Sorry, ich bin kein VB Kerl so in C #):

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};

Dann legen Sie das Geschlecht an dem entsprechenden EntitySet (Namen der Eigenschaft auf DB, die Sie Geschlecht Einheiten erhalten aus dem String unten):

DB.AttachTo("Genders",g);

Damit ist die Datenbank in dem Zustand, in dem das Geschlecht in der ObjectContext ohne eine Datenbankabfrage im unveränderten Zustand ist. Jetzt können Sie eine Beziehung wie für normale bauen

brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();

Das ist alles, was es ist. Keine Notwendigkeit vertrödeln mit EntityKeys

Hope, das hilft

Alex

Andere Tipps

Was Sie brauchen, ist eine Instanz sowohl Marke und Geschlecht und dann eingestellt Brand.Gender auf die Instanz des Gender. Dann können Sie problemlos speichern.

Ok heres, was ich mit anstelle von Update habe kommen. Es erscheint problematisch / möglicherweise ein Sicherheitsrisiko ohnehin mit möglicherweise zusätzlichen Feldern zu sein, die in der Post hinzugefügt. Eine neue Instanz von Geschlecht kann über trygetObjectByKey instanziert werden. Das funktioniert so weit. Alle anderen Vorschläge auf Updates immer das Geschlecht Immobilienobjekt geschätzt zu aktualisieren.

Dim cID As Integer
cID = CInt(Request.Form("Gender"))
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID)

Dim objGenderDS As New Gender
'Bring back the Gender object.
If DB.TryGetObjectByKey(key, objGenderDS) Then
Brand.GenderReference.EntityKey = key
Brand.Gender = objGenderDS
DB.AddToBrand(Brand)
DB.SaveChanges()
Else
End If
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top