2015-04-22 2 views
0

Я использую аннотацию данных, чтобы иметь внешние ключи. EF успешно создает несколько столбцов, но добавляет дополнительный столбец для некоторых атрибутов. Вот мой класс:EF добавляет дополнительный столбец для внешнего ключа

public class Class 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Column(TypeName = "BIGINT")] 
    public Int64 LiIdH { get; set; } 

    [Column(TypeName = "BIGINT"), Index(IsUnique = true)] 
    public Int64 LiIdPeriod { get; set; } 
    public virtual ZPeriod ZPeriod { get; set; } 

    [Column(TypeName = "SMALLINT"), Index(IsUnique = true)] 
    public Int16 SWhCode { get; set; } 
    public virtual InvtWare InvtWare { get; set; } 
} 

Я хотел бы иметь LiIdPeriod и SWhCode как внешние ключи. EF добавляет LiIdPeriod в качестве внешнего ключа, но для SWhCode он просто добавляет дополнительную колонку с именем InvtWare_SWhCode. Как я могу решить эту проблему и иметь SwhCode как внешний ключ? Я предпочитаю аннотацию и атрибуты данных для свободного API.

+2

Если речь идет о внешних ключах, почему вы не показывали свои таблицы внешних ключей и не описывали отношения? –

+0

Это звучит как лучший способ :) – Akbari

ответ

2

Вы можете указать внешний ключ для рамки сущности двумя различными способами.

  1. Использование данных аннотации
  2. Использования API Свободного

Использование данных аннотации

[Column(TypeName = "SMALLINT"), Index(IsUnique = true)] 
public Int16 SWhCode { get; set; } 
[ForeignKey("SWhCode")] 
public virtual InvtWare InvtWare { get; set; } 

Использования API Свободного

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    // Assuming one to many relationship 
    modelBuilder.Entity<Class>().HasRequired(d =>d.InvtWare).WithMany(d => d.Classes).HasForeignKey(d => d.SwhCode); 
} 
Смежные вопросы