Entity Frameworkが子エンティティの削除と同じように機能する理由を理解しようとしています。Entity Frameworkの子エンティティの削除を理解しようとしています
私は、YogaSpace
のオブジェクト/エンティティと、YogaSpaceImage
という子エンティティを持っています。 YogaSpace
からYogaSpaceImage
を削除したいので、ここで私がしていることです。
このは、子エンティティを削除しない仕事
yogaSpace.Images.Remove(yogaSpaceImage);
を行います!私は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;
}
yogaSpace.Images.Remove(yogaSpaceImage);
}
}
}
myRepository.InsertOrUpdate(YogaSpace);
myRepository.Save()
}
は作業を行います。ここで
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;
}
P.S.あなたは私のレポのInsetOrUpdate()
がEntityState.Modified
の子エンティティを削除するために働くと思いますか?
P.P.S.なぜ私はさらにInsertOrUpdate()
が必要なのか分からないが、それは自動生成されたナゲットパッケージで構築された。私がそれを使用せずにSave()
と呼んだら、エンティティフレームワークは私が行った変更を理解しています。なぜなら、なぜ私が生成したのはなぜentity.Added
とentity.Modified
なのでしょうか?明示的にこれら2つを呼び出すのではないか?
public class Parent
{
public int Id { get; set; }
public virtual List<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public int ParentId { get; set;}
}
と設定:
可能な複製(http://stackoverflow.com/questions/16654828/e-code-first-databaseのfirst-databaseのレコードを削除する方法) –