Ich versuche, diese Woche mit EF in den Griff zu bekommen, und ich gehe soweit in Ordnung, aber ich habe gerade meinen ersten großen Haken getroffen. Ich habe eine Tabelle mit Gegenständen und eine Tabelle mit Kategorien. Jeder Gegenstand kann mit vielen Kategorien "markiert" werden, also habe ich eine Verbindungstabelle erstellt. Zwei Spalten, eine die primäre ID des Elements, die andere die primäre ID der Kategorie. Ich habe einige Daten manuell zur Datenbank hinzugefügt und kann alles über EF in meinem Code abfragen.Hinzufügen und Entfernen von Assoziationen - Entity Framework
Jetzt möchte ich ein neues Element mit einer der vorhandenen Kategorien "markieren". Ich habe die Kategorie ID hinzufügen und die ID des Elements. Ich lade beide als Entitäten mit Linq und dann versuchen Sie Folgendes.
int categoryToAddId = Convert.ToInt32(ddlCategoriesRemaining.SelectedValue);
var categoryToAdd = db.CollectionCategorySet.First(x => x.ID == categoryToAddId);
currentCollectionItem.Categories.Add(categoryToAdd);
db.SaveChanges();
Aber ich bekomme „Kann die EntitySet‚collectionItemCategories‘aktualisieren, da es eine DefiningQuery hat und kein Element existiert in dem Element den aktuellen Vorgang zu unterstützen.“
Habe ich etwas verpasst? Ist das nicht der richtige Weg? Ich versuche das gleiche für das Entfernen und auch kein Glück.
Obwohl es stimmt, dass viele zu viele in EF unnötigerweise kompliziert sind und Einschränkungen im Vergleich zu anderen ORMs haben, unterstützt es viele bis viele Beziehungen ziemlich gut, solange Sie FKs in Ihrer Linktabelle und keine Passagierspalten haben, dh Sie haben nur FK-Spalten in Ihrer Linktabelle. Der Fehler, den Sie erhalten, weist darauf hin, dass Ihre Tabellenbeziehungen nicht korrekt zugeordnet sind, da die EF keine Einfügeabfrage generieren kann und erwartet, dass Sie eine mit der Definitionsabfrage definieren. – burnside