WillCascadeOnDelete抛出"关系无法改变......"

时间:2016-01-02 13:58:20

标签: c# ef-code-first entity-framework-6

我有以下配置类

internal class OrderItemConfiguration : EntityTypeConfiguration<OrderItem>
{
    public OrderItemConfiguration()
    {
        ToTable("OrderItem");

        HasRequired<Order>(m => m.Order)
            .WithMany(q => q.OrderItems)
            .HasForeignKey(m => m.OrderId)
            .WillCascadeOnDelete();
    }
}

但是当我尝试删除订单时,它会抛出异常

  

操作失败:无法更改关系,因为   一个或多个外键属性是不可为空的。当一个   改变了关系,相关的外键属性是   设置为空值。如果外键不支持空值,   必须定义新的关系,外键属性必须是   分配了另一个非空值,或者不相关的对象必须是   删除。

另外,我注意到删除规则在外键中设置为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);
    }

1 个答案:

答案 0 :(得分:1)

我终于解决了它。

请参阅以下主题以查看模式详细信息 Difference between DbSet.Remove and DbContext.Entry(entity).State = EntityState.Deleted