Cascade Delete / n zu n / Entity Framework / Linq Expression
-
Komplizierter Titel einfaches Vorhaben
Hallo zusammen.
Folgendes Problem. Habe in meinem EntityFramework (Model First) eine n zu n Beziehung zwischen 2 Entitys. Da bekannterweise hier das EntityFramework kein Cascadisches löschen zulässt muss man das ja selber implementieren.
Meine Versuche das mit Linq zu lösen sind nicht ganz geklückt.
Und zwar hat man ja keinen Zugriff auf die Zwischentabelle. Darum muss man ja von einem Entity ausgehen.
Entity1 heißt Profil Entity2 heißt Rezept.
Nun möchte ich gerne ein Rezept löschen, sagen wir mit Namen "MeinRezept".
Wie suche ich hier nun nach allen Profilen die eine Beziehung zu "MeinRezept" haben und lösche diese Beziehung dann.
Um zum Schluss dann selbst das Rezept "MeinRezept" löschen zu können.
-
Klingt ganz gut.
-
Klingt ganz gut.
Hm. Danke. Soll das nun ein ironischer Hinweis darauf sein, dass du es nicht verstehst. Oder bist du total begeistert aber auch total überfordert.
Nein mal im Ernst. Zu kompliziert erklärt?
-
Nein, nein, auf gar keinen Fall. Du hast das wunderbar erklaert, nur kann ich nirgens eine Frage erkennen? Ohne Frage koennen wir dir nicht helfen.
-
...nur kann ich nirgens eine Frage erkennen?
----
Wie suche ich hier nun nach allen Profilen die eine Beziehung zu "MeinRezept" haben und lösche diese Beziehung dann.
----Also für mich ist das ganz klar eine Frage. Achso das Fragzeichen fehlt. Sorry. Hier kommt es: ?
-
ChickenWing schrieb:
...nur kann ich nirgens eine Frage erkennen?
----
Wie suche ich hier nun nach allen Profilen die eine Beziehung zu "MeinRezept" haben und lösche diese Beziehung dann.
----Also für mich ist das ganz klar eine Frage. Achso das Fragzeichen fehlt. Sorry. Hier kommt es: ?
Ach herjemine, eindeutig zu wenig Schlaf. Sorry, das war mein Fehler, hab das ganz offensichtlich ueberlesen.
Also wenn deine Versuche missglueckt sind, waere es ein gutes wenn du uns einfach mal zeigst was du versucht hast. Eventuell koennen wir dir dann besser helfen.
-
Also inzwischen habe ich es hinbekommen, sogar mit 2 Lösungen.
Allerdings weiß ich nicht ob es auch einfacher geht. Hier mal meine Lösungen:
zuerst mal einen das auswählen:
(recipe bekomme ich übergeben, hier steht in Name "MeinRezept" - damit wir mit der ersten Beschreibung konform sind)
Variante 1:
var query = Database.Profiles.Select(p => new { Profile = p, Recipe = p.Recipes.FirstOrDefault( r => r.Name == recipe.Name) } ).Where(r => r.Recipe != null);
Variante 2:
var query = from p in Database.Profiles from r in p.Recipes where r.Name == recipe.Name select new { Profile = p, Recipe = r };
Und dann löschen:
foreach (var item in query) { item.Profile.Recipes.Remove(item.Recipe); }
Also dann nochmals hier die Frage damit die niemand übersieht
:
Geht es auch einfacher ?
-
Ok um mal auf deine eigentliche Frage zurueck zu kommen. Eigentlich unterstuetzt das Framework das. Du musst das nur in deiner Datenbank definieren das da ein CASCADE ON Delete gemacht wird.
Siehe dazu unter anderem auch hier:
http://stackoverflow.com/questions/937140/delete-an-object-and-all-of-its-related-entities-in-entity-framework
-
Ach jetzt komm. Jetzt dachte ich habe so gut beschrieben.
Ich weiß dass dies das Framework unterstützt. Aber nur bei 1 zu N Beziehungen. Habe ich doch extra geschrieben. Das geht nicht bei N zu N.
-
ChickenWing schrieb:
Ach jetzt komm. Jetzt dachte ich habe so gut beschrieben.
Ich weiß dass dies das Framework unterstützt. Aber nur bei 1 zu N Beziehungen. Habe ich doch extra geschrieben. Das geht nicht bei N zu N.
Omg ich hab eindeutig genug fuer heute... Sorryyyyy!!!!
Hab gerade mal im Netz rumgestoebert und ich glaube das ist mit die beste Loesung die du bereits hast. Ich finde die jetzt nicht dramatisch kompliziert oder so.
-
Omg ich hab eindeutig genug fuer heute... Sorryyyyy!!!!
Ich finde die jetzt nicht dramatisch kompliziert oder so.
Dachte halt vieleicht gibt es noch eine möglichkeit alles auf einmal zu löschen ohne Schleife.