У меня есть следующий класс конфигурацииWillCascadeOnDelete бросает «Отношения не могут быть изменены ...»
internal class OrderItemConfiguration : EntityTypeConfiguration<OrderItem>
{
public OrderItemConfiguration()
{
ToTable("OrderItem");
HasRequired<Order>(m => m.Order)
.WithMany(q => q.OrderItems)
.HasForeignKey(m => m.OrderId)
.WillCascadeOnDelete();
}
}
Но когда я пытаюсь удалить заказ он бросает исключение как
Операция failed: отношение не может быть изменено, потому что одно или несколько свойств внешнего ключа не имеют значения NULL. При изменении в отношении связанное свойство внешнего ключа имеет значение , установленное на нулевое значение. Если внешний ключ не поддерживает нулевые значения, должно быть определено новое отношение, свойство внешнего ключа должно быть , которому присвоено другое ненулевое значение, или не связанный объект должен быть удален .
Также я отметил, что правило удаления установлено в Cascade
во внешнем ключе.
Когда я удаляю в SSMS через запрос, он удаляет все.
Мой код удаления в общий класс хранилища выглядит следующим образом
public virtual void Delete(TEntity entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
public virtual void Delete(params object[] id)
{
var entity = GetById(id);
if (entity == null) return;
Delete(entity);
}
Посмотрите на это может быть helful: http://stackoverflow.com/questions/34038286/cascade-delete-using-fluent-api –
Эта конфигурация должна поддерживаются каскадным удалением в внешнем ключе базы данных. Кроме того, было бы интересно увидеть код, который на самом деле вызывает эту ошибку. –
Я следовал первому подходу кода, и, как я уже говорил выше, правило удаления является Cascade для внешнего ключа. Когда я явно удаляю все дочерние элементы, они удаляются без ошибок. – Jana