[英]How to set on delete cascade for self reference Foreign Key in Entity Framework in ASP.NET
[英]How to Delete ForeignKey (Cascade Delete) in ASP.NET Core 6 code-first
我有兩個模型,它們通過外鍵約束相互綁定。
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; }
}
請幫我解決這個問題。 非常感謝。
我從微軟文檔中得到了一個解決方案。 您只需要執行以下操作:
從現在開始,您可以刪除父行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.