Как получить данные от сущностей, которые наследуют других в Entity Framework 4.0 - PullRequest
1 голос
/ 19 октября 2010

новичок в EF - пожалуйста, потерпите меня.

В связи с тем, как была разработана база данных, в моей модели у меня есть сущность User. Сущность Contact наследуется от сущности пользователя, а сущность Profile наследуется от сущности Contact.

Как получить список профилей и как создать профиль?

Я могу получить список пользователей без проблем.

Ваша помощь очень ценится!

1 Ответ

3 голосов
/ 19 октября 2010

Для Entity Framework 4 Наследование таблиц по типам вам потребуется 2 вещи:

  1. «родительская» таблица и «дочерняя» таблица.«Дочерняя» таблица должна иметь FK для PK «родительской» таблицы.
  2. Вам необходимо установить наследование в EDM.Если все сделано правильно, вы должны увидеть связь стрелок между сущностями, а дочерняя таблица должна иметь текст в имени, указывающий, что она является родителем.

Теперь вы можете получить «Users» следующим образом: (iпредположим, что вы уже это делаете)

var allUsers = ctx.Users;

Теперь получение «Контактов» является особенным - потому что оно принадлежит набору сущностей «Пользователи» (это можно проверить, посмотрев свойства сущности «Контакты»).).

Вот как вы получаете контакты:

var allContacts = ctx.Users.OfType<Contact>();

Как это работает?Ну OfType - это метод расширения IEnumerable, который фильтрует все элементы на основе заданного типа.Так что это в основном цикл foreach:

foreach (var item in source)
{
   if (item is Contact) result.Add(item);
}

Точно так же, как вы получаете профили:

var allProfiles = ctx.Users.OfType<Profile>();

Чтобы добавить новый профиль, снова - добавьте его в сущность "Пользователи"set:

var newProfile = new Profile { Name = "Foo" };
ctx.Users.AddObject(newProfile);

Кстати, Надеюсь эти таблицы не относятся к схеме членства ASP.NET.Если они есть, остановитесь прямо сейчас.Вы не должны отображать эти таблицы через EF.Получите доступ к функциональности через обычный API Членства.

HTH.

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