【发布时间】:2016-03-26 01:04:15
【问题描述】:
我试图理解为什么 Entity Framework 的工作方式与删除子实体的方式一样!
我有一个YogaSpace 对象/实体和一个名为YogaSpaceImage 的子实体。我想从YogaSpace 中删除YogaSpaceImage,所以这就是我要做的。
这不工作
yogaSpace.Images.Remove(yogaSpaceImage);
删除子实体!
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()
}
当我致电myRepo.Removed(YogaSpaceImage) 时,这确实有效。
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()
}
这是 Removed() 和 InsertOrUpdate() 在我的仓库中的样子。
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;
}
附:你会认为我的仓库中的InsetOrUpdate() 可以为EntityState.Modified 删除子实体吗?
P.P.S.不知道为什么我什至需要InsertOrUpdate(),它是使用自动生成的 nuget 包构建的。如果我不使用它而只是调用Save(),实体框架会理解我所做的更改,那么为什么它会为我生成以及为什么entity.Added 和entity.Modified 甚至存在,因为实体被保存并且即使我没有明确调用这两个也进行了修改?
【问题讨论】:
标签: c# entity-framework