После долгого чтения мануалов по fluent api, оказалось что дело совсем в другом.
Fluent api поддерживает cascade delete по умолчанию, проблема была в том, что нажимая "удалить", представление передавало контроллеру сущность в которой поля
public virtual List<Zakupki> Zakupki { get; set; }
public virtual List<Zakladki> Zakladki { get; set; }
public virtual List<Vivod> Vivod { get; set; }
public virtual List<Prodagi> Prodagi { get; set; }
, то есть навигационные свойства были null.
Соответственно EF не мог удалить связанные записи потому что не знал какие, до тех пор пока я вручную не включил их в выборку
[HttpPost]
public ActionResult Delete(Partiya partiya)
{
BirdKeepingDBContext context = new BirdKeepingDBContext();
if (ModelState.IsValid)
{
Partiya part = context.Partiya
.Include("Zakupki")
.Include("Zakladki")
.Include("Vivod")
.Include("Prodagi")
.Single(p => p.NomerPartii == partiya.NomerPartii);
context.Partiya.Remove(part);
context.SaveChanges();
}
return View(partiya);
}
Остался небольшой вопрос, Include требует строку с именем связанного объекта, но напрямую прописывать, как у меня, как-то не хорошо. Как это лучше записать и вообще может есть конструкции получше чем эта?
context.Partiya
.Include("Zakupki")
.Include("Zakladki")
.Include("Vivod")
.Include("Prodagi")