实体框架核心与同一表格复杂性的多重关系

时间:2017-06-10 03:03:11

标签: c# mysql entity-framework entity-framework-6 entity-framework-core

我有以下课程

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不接受它抛出第二个错误“可能导致循环或多个级联路径”

0 个答案:

没有答案