Требуется ли для отображения дочернего класса в EF 4.1 свойство ID? - PullRequest
2 голосов
/ 09 декабря 2011

Я начинаю перемещать некоторый код в EF4.1, и у меня возникают проблемы с загрузкой дочерних классов.

Я нашел эту статью и похоже, что есть способ сопоставить дочерний класс, но мне было интересно, требуются ли столбцы идентификаторов в родительском классе.

Я подумал, что "нет кода" просто включить ссылку на дочерний класс, а об остальном позаботились.

Вот текущая модель объекта:

public class classMember
{
    public int MemberID {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
}

public class classReservation
{
    public int ReservationID {get; set;}
    public classMember Member {get; set;}
}

Но загрузка classReservation просто дает нулевые члены.

Нужно ли включать свойство для MemberID в classReservation, а также в classMember? Это кажется излишним с точки зрения дизайна.

1 Ответ

1 голос
/ 09 декабря 2011

Прежде всего, чтобы иметь свойства навигации от одного объекта к другому, они должны быть объявлены как виртуальные в вашем POCO.Итак, вы хотели бы это:

public class classReservation
{
    public int ReservationID {get; set;}
    public virtual classMember Member {get; set;}
}

Это потому, что во время выполнения EF фактически подклассирует ваш POCO, используя отражение.Чтобы свойство навигации работало, оно должно иметь возможность переопределять его.Вот почему это должно быть virtual.

Чтобы ответить на ваш второй вопрос, нет, вам не нужно иметь «свойство внешнего ключа» от дочерней сущности к родительской сущности.Это помогает EF, но не является необходимым.

Мы находимся в процессе удаления свойств внешнего ключа из наших моделей сущностей.Для этого вам все равно нужно сказать EF, как отобразить отношения в БД.Это можно сделать в методе OnModelCreating вашего класса DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<classReservation>
        .HasRequired(r => r.classMember)
        .WithMany()
        .Map(x => x.MapKey("MemberId"));
}

Вы также можете использовать HasOptional, WithRequiredDependent и т. Д., В зависимости от количества элементов и кратности отношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...