我有两张table:产品和外部产品。产品可以是外部产品,外部产品与产品相关。
尽管将外键从Product放到ExternalProduct是直观的,但这是对更复杂场景的最小复制,而这是不可能的。
因此ExternalProduct有一个指向Product的外键。此时Entity框架生成以下代码:
Product.cs:
public virtual ICollection<ExternalProduct> ExternalProduct { get; set; }
外部产品的EFMap:
builder.HasOne(d => d.Product)
.WithMany(p => p.ExternalProduct)
.HasForeignKey(d => d.ProductId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("ExternalProduct_Product_Id_fk");
这在技术上是正确的,因为EF,具有从ExternalProduct到Product的外键,认为这是一对多的关系,但是,在我的情况下,对于Product只有一个ExternalProduct。
如何修改配置以实现此目标?
1条答案
按热度按时间yvgpqqbh1#
两个实体之间要么有关系,要么没有关系。如果你在
Product
和ExternalProduct
之间有一对一的关系,那么你需要在关系的两边都有相应的列/属性。另一个选项是(零或一)对一,那么你可以在关系的(零或一)一边声明可空的属性:此外,您还可以考虑使用EF Core中提供的inheritance hierarchy options。
如果所有这些都不适合你(即很可能这里没有实际的关系)-然后删除双方的关系(并可能添加一些索引)。