【问题标题】:How to remove multiple cascade paths in entity framework如何删除实体框架中的多个级联路径
【发布时间】:2020-12-30 22:07:40
【问题描述】:

我正在尝试定义表之间的关系,但收到以下错误:

在表“QProducts”上引入 FOREIGN KEY 约束“FK_QProducts_Quotes_QuoteId”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。查看以前的错误。

这就是我的表格的样子:

我想要达到的目标:

A.客户创建查询并添加他希望收到报价的产品和数量

B.供应商为每种产品报价并写下价格

C. Products 表包含有关数量的信息,QProducts 表在报价期间使用价格等信息对其进行了扩展,因此我可以在报价下显示产品的数量和价格。

但错误不允许更新数据库。如何消除此错误?

我的关系是由实体框架创建的:

  1. 一个广告有很多报价,产品:
public List<Quote> Quotes { get; set; } = new List<Quote>();
public List<Product> Products { get; set; } = new List<Product>();
  1. 一个报价包含多个 QPRODUCTS 和一个广告:
public Advert Advert { get; set; }
public int AdvertId { get; set; }

public List<QProduct> QProducts { get; set; } = new List<QProduct>();
  1. 产品有一个广告,许多 QPRODUCTS:
public int AdvertId { get; set; }
public Advert Advert { get; set; }

public List<QProduct> QProducts { get; set; } = new List<QProduct>();
  1. QProduct 有一个报价,一个产品:
public Quote Quote { get; set; }
public int QuoteId { get; set; }

public Product Product { get; set; }
public int ProductId { get; set; }

【问题讨论】:

    标签: c# sql-server entity-framework-core blazor-server-side


    【解决方案1】:

    简而言之,您目前无法通过多条路径将级联删除到 QProduct。您需要关闭一个(或两者,如果您愿意)的级联删除。

    比如配置Product的时候,试试:

    HasMany(p => p.QProducts)
       .WithOne(q => q.Product)
       .HasForeignKey(q => q.ProductId)
       .OnDelete(DeleteBehavior.Restrict);
    

    您可能还需要使 FK 为空:

    public int? ProductId { get; set; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2014-12-20
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多