Как избавиться от свойства внешнего ключа в EF? - PullRequest
0 голосов
/ 02 августа 2011

Сначала я использую EF CTP 5 Code.Если вы попросите EF сгенерировать базу данных для модели, подобной этой, это создаст для вас подходящее отношение внешнего ключа:

public class Parent
{
    public ICollection<Child> MyChildren { get; set; }
}

public class Child 
{ 
    public Parent MyParent { get; set; }
}

В результате такой генерации у дочерней таблицы будет что-то вроде поля MyParent_Id.Теперь у меня возникла обратная проблема - у меня есть схема БД, для которой я должен построить аналогичную простую модель.Под подобным простым я подразумеваю без каких-либо явных свойств внешнего ключа.Есть ли способ сделать это?

Единственный способ сделать сопоставление, которое я нашел, выглядит следующим образом, но это подразумевает наличие открытого свойства MyParentId в модели, которого я пытаюсь избежать.Так как этого избежать?

public class Child 
{ 
    [Column("ParentID")]
    public int MyParentId { get; set; }

    [ForeignKey("MyParentId")]
    public Parent MyParent { get; set; }
}  

Заранее спасибо

1 Ответ

2 голосов
/ 02 августа 2011

Одним из способов является определение вашего отображения в коде, а не использование атрибутов.В вашем классе «context» (тот, который наследуется от DbContext):

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Child>()
        .HasRequired(c => c.MyParent)
        .WithMany()
        .Map(c => c.MapKey("MyParent_Id"));
}

В этом случае «MyParent_Id» - это имя столбца в дочерней таблице, а не имя какого-либо свойствана Child класс.

...