Während EF Lernen passiert Link Entity Framework Databinding with WinForms, müssen zwei kleine Präzisierungen in Bezug auf den Code unten, um zu sehenWarum Entity Framework löscht die Entität nicht, wenn ich sie aus der Navigationseigenschaftssammlung entferne?
// Currently, the Entity Framework doesn’t mark the entities
// that are removed from a navigation property (in our example the Products)
// as deleted in the context.
// The following code uses LINQ to Objects against the Local collection
// to find all products and marks any that do not have
// a Category reference as deleted.
// The ToList call is required because otherwise
// the collection will be modified
// by the Remove call while it is being enumerated.
// In most other situations you can do LINQ to Objects directly
// against the Local property without using ToList first.
foreach (var product in _context.Products.Local.ToList())
{
if (product.Category == null)
{
_context.Products.Remove(product);
}
}
// Save the changes to the database.
this._context.SaveChanges();
1, wenn wir ein Kind Element löschen, das Produkt (nav Eigentum der Kategorie) aus einer Kategorie ist, das Produkt. Kategorie wird null. Wir löschen das Produkt (nav der Kategorie) und wie die Entity-Frame-Arbeit die Kategorie als null in lokalen Kollektionsprodukten markiert.
2 Gibt es andere Optionen zum Löschen der nav-Eigenschaft als das Aufzählen der gesamten Sammlung? Wenn Nein können wir nur das Element unter dieser bestimmten Kategorie durchlaufen, um Leistungsprobleme zu vermeiden, wie können wir die "foreach (var product in _context.Products.Local.ToList()) ", um nur das Element in dieser Kategorie zu durchlaufen.
Es ist mir nicht klar, was Ihr Problem ist. 1. * product.category wird null * Na und? Sie löschen es trotzdem. 2. * diese bestimmte Kategorie * Welche Kategorie? Sie löschen Produkte * ohne * eine Kategorie. –
Der Code dient einem wichtigen Ziel: Erkennen, welche Produkte gelöscht werden sollen. Um herauszufinden, warum ein solcher Code geschrieben wurde, lesen Sie die Antwort unten. –