繁体   English   中英

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

[英]Entity Framework Creates unwanted relationship between abstract and derived tables

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

// 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>模型.Id
  • ComparisonModel.BrandId> Brands.Id
  • ComparisonModel.BrandId> ComparisonBrand.Id

由于CompareBrand.Id是Brands.BrandId的FK,因此删除Brand记录时出现错误。 但是,如果删除了ComparisonModel.BrandId> ComparisonBrand.Id关系,则删除工作正常。

如何防止抽象表和派生表(品牌和比较品牌)之间形成关系?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM