Для Case1 вы просто удаляете отношение внешнего ключа и не удаляете Tab_Details
из БД.Один из способов исправить это было бы использовать:
context.Tab_Detail.Remove(detail);
вместо:
DELETETEST.Tab_Details.Remove(detail);
Я не уверен, если это делает ваш Case2 неуместным, но сейчас я бы предложил простопереключение на одну строку.
Если это возможно, я бы просто получил Tab_Detail
из БД, например, используя
var detail = (from d in context.Tab_Detail where d.IdTab_Master== 472 select o).FirstOrDefault();
if(detail != null)
{
context.Tab_Detail.Remove(detail);
context.SaveChanges();
}
, предполагая, что мастер имеет только одну деталь;в противном случае, если вы знаете IdDetails
, просто используйте его для выбора.
РЕДАКТИРОВАТЬ: измените последнюю часть Case2 (OnModelCreating
) на
modelBuilder.Entity<Tab_Master>()
.HasMany(x => x.Tab_Details)
.WithRequired(x => x.IdTab_Master)
.WillCascadeOnDelete();
Каскадное удаление должно бытьустановить в true;Это означает, что если вы удалите Мастер, все детали должны быть удалены (в противном случае вы также получите ошибку, которую вы упомянули).Для дальнейшего ознакомления посмотрите здесь