Ich versuche zu verstehen, warum Entity Framework funktioniert so wie es mit dem Löschen von untergeordneten Entitäten tut!Versuchen zu verstehen, Löschen untergeordneten Entitäten in Entity Framework
Ich habe ein YogaSpace
Objekt/Entität und eine untergeordnete Entität namens YogaSpaceImage
. Ich möchte eine YogaSpaceImage
von YogaSpace
löschen, also hier ist was ich mache.
Diese DOES NOT Arbeit
yogaSpace.Images.Remove(yogaSpaceImage);
ein Kind Entität zu löschen!
public string RemoveImage(int id, int imageIdToDelete)
{
YogaSpace yogaSpace = _yogaSpaceRepository.Find(id);
// delete image
foreach (YogaSpaceImage yogaSpaceImage in yogaSpace.Images.OrderBy(m => m.Ordering))
{
if (yogaSpaceImage.YogaSpaceImageId == imageIdToDelete)
{
// check first to see if the deleted image is the first (primary) image, then make the 2nd image the yogaspace thumbnail
if (yogaSpaceImage.Ordering == 1)
{
yogaSpace.SpaceThumbnail = yogaSpace.Images.First(m => m.Ordering == 2).ImageThumbnail;
}
yogaSpace.Images.Remove(yogaSpaceImage);
}
}
}
myRepository.InsertOrUpdate(YogaSpace);
myRepository.Save()
}
Diese tut Arbeit, wenn ich myRepo.Removed(YogaSpaceImage)
nennen.
public string RemoveImage(int id, int imageIdToDelete)
{
YogaSpace yogaSpace = _yogaSpaceRepository.Find(id);
// delete image
foreach (YogaSpaceImage yogaSpaceImage in yogaSpace.Images.OrderBy(m => m.Ordering))
{
if (yogaSpaceImage.YogaSpaceImageId == imageIdToDelete)
{
// check first to see if the deleted image is the first (primary) image, then make the 2nd image the yogaspace thumbnail
if (yogaSpaceImage.Ordering == 1)
{
yogaSpace.SpaceThumbnail = yogaSpace.Images.First(m => m.Ordering == 2).ImageThumbnail;
}
_yogaSpaceRepository.Removed(yogaSpaceImage);
}
}
}
myRepository.Save()
}
Hier ist, was Removed()
und InsertOrUpdate()
aus wie in meinem Repo.
public void InsertOrUpdate(YogaSpace yogaSpace)
{
if (yogaSpace.YogaSpaceId == default(int))
{
context.Entry(yogaSpace).State = System.Data.Entity.EntityState.Added;
}
else
{
context.Entry(yogaSpace).State = System.Data.Entity.EntityState.Modified;
}
}
public void Removed(YogaSpaceImage yogaSpaceImage)
{
context.Entry(yogaSpaceImage).State = EntityState.Deleted;
}
P.S. Sie würden denken, InsetOrUpdate()
in meinem Repo würde für EntityState.Modified
arbeiten, um eine Kind-Entität zu entfernen?
P.P.S. nicht sicher, warum ich sogar InsertOrUpdate()
brauche, wurde es mit dem automatisch erzeugten nugget-Paket gebaut. Wenn ich es nicht verwende und einfach Save()
anrufe, versteht Entity Framework die Änderungen, die ich gemacht habe, also warum zum Teufel ist es für mich generiert und warum entity.Added
und entity.Modified
sogar existiert, weil Entitäten gespeichert und geändert werden, selbst wenn ich nicht 't ruft diese zwei explizit an?
Mögliche Duplikat [? Wie Kind Code ein zu vielen Datensätzen in EF erste Datenbank entfernen] (http://stackoverflow.com/questions/16654828/How-to-remove-Kind-Eins-zu-viele-bezogene-Datensätze-in-ef-Code-erste-Datenbank) –