WillCascadeDelete抛出“;无法更改关系&”;

本文关键字:关系 抛出 WillCascadeDelete | 更新日期: 2023-09-27 18:28:39

我有以下配置类

internal class OrderItemConfiguration : EntityTypeConfiguration<OrderItem>
{
    public OrderItemConfiguration()
    {
        ToTable("OrderItem");
        HasRequired<Order>(m => m.Order)
            .WithMany(q => q.OrderItems)
            .HasForeignKey(m => m.OrderId)
            .WillCascadeOnDelete();
    }
}

但当我试图删除订单时,它会将异常作为抛出

操作失败:无法更改关系,因为一个或多个外键属性不可为null。当对关系进行更改时,相关的外键属性为设置为空值。如果外键不支持空值,必须定义新关系,外键属性必须指定了另一个非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);
    }

WillCascadeDelete抛出“;无法更改关系&”;

我终于解决了它。

请参阅以下线程以查看模式详细信息DbSet.Remove和DbContext.Entry(实体).State=EntityState.Deleted 之间的差异