我有以下课程
public class ReleatedProduct
{
public int ReleatedProductId { get; set; }
public int FirstProductId { get; set; }
public Product FirstProduct { get; set; }
public int SecondProductId { get; set; }
//public Product SecondProduct { get; set; }
}
如果双方(产品二的产品之一)被删除,这种关系就不应该存在,所以我简单地试图在两者上级联删除
我尝试的第一件事
builder.Entity<Product>()
.HasMany<ReleatedProduct>(p => p.ReleatedProducts)
.WithOne(rp => rp.FirstProduct)
.HasForeignKey(rp => rp.FirstProductId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade)
.HasForeignKey(rp => rp.SecondProductId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);
但它失败并抛出一个错误,你不能在相同的导航属性上有两个版本(p.ReleatedProducts,如果这不明显,则为ReleatedProduct类型)
然后我尝试将此导航属性拆分为两个属性(一个作为虚拟
builder.Entity<ReleatedProduct>()
.HasOne(rp => rp.FirstProduct)
.WithMany(p => p.ReleatedProductsFrom)
.HasForeignKey(rp => rp.FirstProductId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);
builder.Entity<ReleatedProduct>()
.HasOne(rp => rp.SecondProduct)
.WithMany(p => p.ReleatedProductsTo)
.HasForeignKey(rp => rp.SecondProductId)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);
但它仍然失败了,这可能会导致错误,这可能导致循环或多个级联路径
我尝试仅使用名称约定和导航属性,并导致相同的错误
所以任何解决方案或解决方法?
P.S。约束按预期生成(第一个和第二个产品的2个FK用于ondelete级联)但db不接受它抛出第二个错误“可能导致循环或多个级联路径”