我有以下配置类
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);
}
答案 0 :(得分:1)
我终于解决了它。
请参阅以下主题以查看模式详细信息 Difference between DbSet.Remove and DbContext.Entry(entity).State = EntityState.Deleted