我有两个模型,它们通过外键约束相互绑定。
PurchaseOrder
为父表
PurchaseOrderQtyBreakDown
是子表现在的问题是,当我试图删除父表,这个错误发生:
SqlException: DELETE语句与REFERENCE约束"FK_POQtyBreakDown_PurchaseOrder_PurchaseOrderPoId"冲突。冲突发生在数据库infosys_commercialapi,表dbo. poqtybreakdown,列PurchaseOrderPoId
我尝试了以下方法来实现Cascade Delete
。但是它不能正常工作。
DbContext
:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
// Commercial Tables
// Back-To-Back
public DbSet<PurchaseOrder> PurchaseOrder { get; set; }
public DbSet<PurchaseOrderQtyBreakDown> POQtyBreakDown { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<PurchaseOrderQtyBreakDown>()
.HasOne(s => s.PurchaseOrder)
.WithMany(b => b.PurchaseOrderQtyBreakDown)
.HasForeignKey(b => b.PurchaseOrderPoId)
.OnDelete(DeleteBehavior.Cascade);
base.OnModelCreating(modelBuilder);
}
}
PurchaseOrder
&PurchaseOrderQtyBreakDown
模型类如下所示:
public class PurchaseOrder
{
[Key]
public int PoId { get; set; }
[DisplayName("CONTRACT")]
public int? ContractListId { get; set; }
[ForeignKey("ContractListId")]
[ValidateNever]
public ContractList? ContractList { get; set; }
[DisplayName("ORDER NO")]
[ValidateNever]
public string? OrderNo { get; set; }
public virtual List<PurchaseOrderQtyBreakDown> PurchaseOrderQtyBreakDown { get; set; } = new List<PurchaseOrderQtyBreakDown>();
}
public class PurchaseOrderQtyBreakDown
{
public int Id { get; set; }
public int? PurchaseOrderPoId { get; set; }
[ForeignKey("PurchaseOrderPoId")]
[ValidateNever]
public PurchaseOrder? PurchaseOrder { get; set; }
public int? ContractListId { get; set; }
[ForeignKey("ContractListId")]
[ValidateNever]
public ContractList? ContractList { get; set; }
public int? Qty { get; set; }
public decimal? UnitPrice { get; set; }
public string? OrderNo { get; set; }
}
请帮我解决这个问题。非常感谢。
我从微软文档中得到了一个解决方案。您只需要执行以下操作:
- 进入数据库
- 选择子表 <
- 打开键/gh>
- 选择想要"cascade"的FK关系
- 右键选择修改
- 选择INSERT And UPDATE Spec
- 选择删除规则
- 设置选项"cascade";
- 并保存。
从现在开始您可以删除父行。