Ответы пользователя по тегу Entity Framework
  • Как на настроить миграцию с Model first approach?

    @zakar1ya Автор вопроса
    Junior
    Ответим будет никак. Миграцию можно настроить только используя Code First, для Schema или ModelFirst нужно обновлять edmx самому, у него свой специальный визард есть. А для изменения самой базы взял fluentmigrator, просто настраивается хранит версии миграций, легко откатить или обновить базу.
    Ответ написан
    Комментировать
  • Как настроить cascade delete в Entity Framework?

    @zakar1ya Автор вопроса
    Junior
    После долгого чтения мануалов по 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")
    Ответ написан
    Комментировать
  • Где ошибка в описании сущностей?

    @zakar1ya Автор вопроса
    Junior
    Как и сказал Виталий Литвинюк , проблема была из-за способа подгрузки связанных данных. Вместо lazy load сделал eagerly load, когда получал закупки из контекста dbContext.Zakupki.Include(b => b.Adresses).ToList();
    Кому нужно, подробно здесь расписано.
    Ответ написан
    Комментировать