如果任何圖庫通過FrontSheet
屬性引用該圖像,那麼您在數據庫中有禁止刪除圖像的約束。你需要做的是將這些關係設置爲NULL
。 (這種關係似乎是可選的,因此您可以將數據庫中的外鍵設置爲NULL
。)使用您的模型,您將不得不選擇所有指向您想要刪除的圖像的圖庫。它應該是這樣的,如果你想刪除使用id = givenImageId
圖像:
using (var context = new MyDbContext())
{
var imageToDelete = context.Images.Single(i => i.Id == givenImageId);
var galleries = context.Galleries.Include("Frontsheet")
.Where(g => g.Frontsheet.Id == givenImageId)
.ToList();
foreach(var gallery in galleries)
gallery.Frontsheet = null;
context.Images.Remove(imageToDelete);
context.SaveChanges();
}
如果你想對你的Gallery
實體的外鍵屬性...
public long? FrontsheetId { get; set; }
...你將不需要的前板與畫廊一起加載這將提高性能:
using (var context = new MyDbContext())
{
var imageToDelete = context.Images.Single(i => i.Id == givenImageId);
var galleries = context.Galleries // no Include anymore required
.Where(g => g.FrontsheetId == givenImageId)
.ToList();
foreach(var gallery in galleries)
gallery.FrontsheetId = null;
context.Images.Remove(imageToDelete);
context.SaveChanges();
}
抱歉,您的標題讓我發笑。 – Eonasdan