У вас есть ограничение в базе данных, которое запрещает удалять изображение, если какая-либо галерея ссылается на него через свойство 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();
}