2013-03-04 13 views
1

首先使用代码,我有一些抽象类和从这些抽象类派生的一些类。实体框架创建抽象表和派生表之间不需要的关系

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

由于ComparisonBrand.Id是Brands.BrandId的FK,因此在删除Bran时发生错误d记录。如果我删除ComparisonModel.BrandId> ComparisonBrand.Id关系,但是,删除工作正常。

如何避免抽象表与派生表(Brands and ComparisonBrand)之间形成关系?

回答

0

您正在使用虚拟关键字,这导致Lazy Loading。您通过此功能告诉EF为他们生成外键。放弃虚拟并且您不会再创建密钥