2016-01-02 2 views
0

У меня есть следующий класс конфигурации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); 
    } 
+0

Посмотрите на это может быть helful: http://stackoverflow.com/questions/34038286/cascade-delete-using-fluent-api –

+0

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

+0

Я следовал первому подходу кода, и, как я уже говорил выше, правило удаления является Cascade для внешнего ключа. Когда я явно удаляю все дочерние элементы, они удаляются без ошибок. – Jana

ответ

Смежные вопросы