2013-03-04 2 views
1

Используя код во-первых, у меня есть некоторые абстрактные классы и некоторые классы, полученные из этих абстрактных классов.Entity Framework Создает нежелательные отношения между абстрактными и производными таблицами

// 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 является FK для Brands.BrandId, я получаю сообщение об ошибке при удалении отруба d запись. Однако, если я удалю сравнение ComparisonModel.BrandId> ComparisonBrand.Id, удаление будет прекрасным.

Как я могу предотвратить формирование отношений между как абстрактной таблицей, так и производной таблицей (Brands and ComparisonBrand)?

ответ

0

Вы используете виртуальное ключевое слово, которое вызывает Lazy Loading. Вы говорите EF для создания внешних ключей для них через эту функцию. Отбросьте виртуальную, и вы больше не будете создавать ключи

Смежные вопросы