实体框架在抽象表和派生表之间创建不需要的关系

本文关键字:创建 不需要 关系 之间 框架 抽象 实体 派生 | 更新日期: 2023-09-27 18:02:24

首先使用代码,我有一些抽象类和从这些抽象类派生的一些类。

// Abstracted Classes
public abstract class Brand
{
  [Key]
  public int Id { get; set; }
  public string Name { get; set; }
}
public abstract class Model
{
  [Key]
  public int Id { get; set; }
  public string Name { get; set; }
}
// Derived Classes
[Table("ComparisonBrand")]
public class ComparisonBrand : Brand
{
  public ComparisonBrand()
  {
    ComparisonValues = new List<ComparisonValue>();
    Models = new List<ComparisonModel>();
  }
  public virtual ICollection<ComparisonValue> ComparisonValues { get; set; }
  public virtual ICollection<ComparisonModel> Models { get; set; }
}
[Table("ComparisonModel")]
public class ComparisonModel : Model
{
  public int? BrandId { get; set; }
  public int? LogoId { get; set; }
  [ForeignKey("BrandId")]
  public virtual ComparisonBrand ComparisonBrand { get; set; }
  [ForeignKey("LogoId")]
  public virtual ComparisonLogo ComparisonBrand { get; set; }
  public virtual ICollection<ComparisonValue> ComparisonValues { get; set; }
}

我的问题是迁移生成外键:

  • ComparisonModel。Id> Models。Id
  • ComparisonModel。branddid>品牌。Id
  • ComparisonModel。品牌>比较品牌。Id
自ComparisonBrand

。Id是品牌的FK。BrandId,我在删除Brand记录时得到一个错误。如果我删除ComparisonModel。品牌>比较品牌。然而,Id关系,删除工作正常。

如何防止在抽象表和派生表(Brands和ComparisonBrand)之间形成关系?

实体框架在抽象表和派生表之间创建不需要的关系

您正在使用虚拟关键字,这会导致延迟加载。您告诉EF通过此功能为它们生成外键。删除虚拟,您将不再创建键