EF6.0 & ldquo; Невозможно изменить отношение, так как одно или несколько свойств внешнего ключа не могут быть равны нулю & rdquo;

Возможно, вы сможете сделать это с помощью xpath. что-то вроде //tr[contains(@class, 'row') and position() mod 2 = 0] может работать. Существуют другие вопросы SO, расширяющие подробности о том, как более точно сопоставлять классы.

29
задан Nico 15 March 2017 в 23:26
поделиться

4 ответа

Вам необходимо удалить ItemTypeItem. Невозможно просто удалить его из списка «Предметы», поскольку он не может существовать сам по себе, поскольку имеет необнуляемый внешний ключ, ссылающийся на ItemType (ItemTypeID).

Для удаления ItemTypeItem добавьте

context.Entry(itemTypeItem).State = EntityState.Deleted;
49
ответ дан Olav Nybø 15 March 2017 в 23:26
поделиться

В структуре сущностей 6.0, если вы удалите сущность из основного набора контекста, она будет работать. Например, чтобы удалить инвестиционную сущность, вы должны сделать следующее:

context.Investments.Remove(entity);
context.SaveChanges();

Это отличается от попытки удалить сущность от ее родителя / владельца следующим образом:

bankAccount.Investments.Remove(entity);
context.SaveChanges();

Это приведет к тому, что отношения не могут быть изменены, исключение перечислено выше. Надеюсь, это поможет.

44
ответ дан octavioccl 15 March 2017 в 23:26
поделиться

В объекте 6.0 существует различие между:

context.Investments.Remove(entity);

и

context.Entry(entity).State = EntityState.Deleted;

Когда включено использование первого и каскадного удаления, EF внутренне выполнит необходимые удаления дочернего элемента. коллекции. При использовании второй опции EF не будет обрабатывать необходимые удаления, но позволит вам выполнить повторное связывание / удаление этих дочерних объектов.

19
ответ дан Eddieke 15 March 2017 в 23:26
поделиться

Эта проблема возникает из-за того, что мы пытаемся удалить родительскую таблицу, но данные дочерней таблицы присутствуют. Мы решаем проблему с помощью каскадного удаления.

В модели Create метод в классе dbcontext.

 modelBuilder.Entity<Job>()
                .HasMany<JobSportsMapping>(C => C.JobSportsMappings)
                .WithRequired(C => C.Job)
                .HasForeignKey(C => C.JobId).WillCascadeOnDelete(true);
            modelBuilder.Entity<Sport>()
                .HasMany<JobSportsMapping>(C => C.JobSportsMappings)
                  .WithRequired(C => C.Sport)
                  .HasForeignKey(C => C.SportId).WillCascadeOnDelete(true);

После этого в нашем вызове API

var JobList = Context.Job                       
          .Include(x => x.JobSportsMappings)                                     .ToList();
Context.Job.RemoveRange(JobList);
Context.SaveChanges();

опция каскадного удаления удаляет родительскую, а также родительскую дочернюю таблицу с помощью этого простого кода. Сделайте так, чтобы это было так просто.

Remove Range, который используется для удаления списка записей в базе данных. Спасибо

1
ответ дан Sowmiya V 15 March 2017 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: