Aktivieren RemoveRange entfernen von Prädikat auf entity
In eine business-Schicht ist eine Menge von sich wiederholenden code beim ausbauen der Beziehungen zu einem Element, das entfernt wird, die selbst (ohne den nutzen von ein cascading delete auf die Datenbank). Neben den zugehörigen Entität löschen use-case -, ein guter Ansatz könnte auch verwendet werden, in der Regel nur reduzieren Sie den erforderlichen code zu löschen einen Eintrag, indem jeder die passende Prädikat, wie die von id oder so ähnlich.
//Simple example removing phone numbers from people entity
//The "personId" is an identifier passed into the method performing the deletion
var phones = _context.Phones
.Where(m => m.PersonId == personId)
.ToList();
if (phones.Count > 0)
_context.Phones.RemoveRange(phones);
Ich bin dieses posting, als eine Q&A mit der Lösung, die ich kam mit, so dass ich es später. Würde auf jeden Fall gerne sehen, andere Ansätze.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein Ansatz ist, um eine überlastung der RemoveRange-Methode auf einem DbSet mit einem Ausdruck. Um dies so bequem wie möglich implementieren Sie diese als eine Methode der Erweiterung auf die DbSet Person selbst, so dass der Prozess ist einfach überlastet auf die DbSet mit der tatsächlichen RemoveRange-Methode.
Mit dieser Erweiterung, werden die RemoveRange können jetzt aufgerufen werden, ähnlich wie ein
Where
.RemoveRange
eigentlich ein bisschen mehr optimiert. Unter der Haube nachInternalSet
Umsetzung von EF6 auf CodePlex, es ist nur der Iteration, wie Sie sagte. Völlig untauglich für die Ansatz - naja.Weitere option ist die Verwendung von SQL direkt:
https://msdn.microsoft.com/en-us/library/gg679456%28v=vs.113%29.aspx
Es ist eine Erweiterung EF, der läuft, UPDATE-und DELETE-Abfragen auf mehrere Datensätze auf einer einzelnen DML-Anweisung
Ich kann mich nicht erinnern, die syntax ist aber ähnlich wie
Diese LINQ-Anweisung wird
https://github.com/loresoft/EntityFramework.Extended
context.Users.Where(u => u.FirstName == "firstname").Delete();