Я столкнулся с проблемой удаления объектов отношений с db. Все работает отлично на моем localdb, но оно вызывает ошибку при запуске на сервере. У меня есть следующее модель:Entity Framework Remove One-to-Zero-One Replationship
public class Article
{
public Article()
{
Paragraphs = new List<Paragrap>();
}
public int ID { get; set; }
public DateTime PostedDate { get; set; }
public string Title { get; set; }
public bool isPosted { get; set; }
public virtual ICollection<Paragrap> Paragraphs { get; set; }
}
public class Paragrap
{
public int ID { get; set; }
public int ArticleID { get; set; }
public string Text { get; set; }
//[ForeignKey("PictureRefID")]
//public int PictureID { get; set; }
public virtual Picture Picture { get; set; }
[ForeignKey("ArticleID")]
public virtual Article Article { get; set; }
}
public class Picture
{
[Key, ForeignKey("Paragrap")]
public int ID { get; set; }
public string PictureURL { get; set; }
public string Description { get; set; }
public virtual Paragrap Paragrap{ get; set; }
}
И когда им пытаются удалить статью, я также хочу, чтобы удалить абзацы и картинки. Если я правильно понимаю, проблема заключается в удалении снимков из БД, но я могу ошибаться. Метод Delete:
public async Task<ActionResult> DeleteConfirmed(int id)
{
Article article = db.Articles.Find(id);
List<Paragrap> ParToDelete = new List<Paragrap>();
List<Picture> PicToDelete = new List<Picture>();
List<Ingreadient> IngToDelete = new List<Ingreadient>();
try
{
var p = from c in db.Paragraps
where c.ArticleID == id
select c;
ParToDelete.AddRange(p);
foreach (var item in p)
{
var i = item.ID;
PicToDelete.Add(db.Pictures.Find(i));
}
foreach (var item in article.Ingreadient)
{
IngToDelete.Add(item);
}
db.Paragraps.RemoveRange(ParToDelete);
db.Pictures.RemoveRange(PicToDelete);
db.Articles.Remove(article);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
catch
{
Article art = await db.Articles.FindAsync(id);
return View(article);
}
}
Идентификатор абзаца и идентификатор изображения от 1 до 1 в db (сервер). Кто-нибудь знает, в чем проблема?
UPDATE После дополнительной отладки я кажется, проблема в (I) методом db.Pictures.Find. Я проверил Picture DB ID, и они совпадают с значением, переданным методу.
гораздо лучшим подходом было бы положить 'IsActive' флаг на объекте и просто установить это «ложь». Мягкое удаление, как это, в долгосрочной перспективе является гораздо лучшей практикой. Разматывание внешних ключей * отстой *. – nurdyguy
Попробуйте удалить фотографии перед удалением абзацев. Когда вы удаляете абзац, у вас есть внешний ключ на картинке, который затем недействителен. – nurdyguy
Удаление фотографий перед параграфом не сработало. Я в основном смущен, потому что на localdb все работает, но не на сервере – Demon