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);
}
我终于解决了它。
请参阅以下线程以查看模式详细信息DbSet.Remove和DbContext.Entry(实体).State=EntityState.Deleted 之间的差异