Как выбрать объект через внешний ключ - PullRequest
0 голосов
/ 04 августа 2009

Если у меня есть таблица с первичным ключом (AccLinkID) и внешним ключом (aspnet_Users UserID), как я могу выбрать объект, на который указывает внешний ключ, используя Linq to Entities.

User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;

не работает ...

У кого-нибудь есть идеи?

Ответы [ 3 ]

1 голос
/ 04 августа 2009

Несмотря на то, что вы можете решить эту проблему с помощью функции "Включить", как предлагали другие, я бы так не поступил. Вместо этого я бы спроектировал, который никогда не требует включать:

var q = from al in yDB.AccLinkSet
        where al.LinkID == linkId
        select al.aspnet_Users;

В этом случае пользователи загружаются автоматически.

1 голос
/ 04 августа 2009

Попробуйте это:

User myUser = _myDB.AccLinkSet.Include("aspnet_Users")
    .Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users;
0 голосов
/ 04 августа 2009

На данный момент, с Entity Framework 1, вы не получаете автоматическую отложенную загрузку, например, если вы хотите перейти от одной сущности к другой, вам нужно либо сделать .Include("OtherEntity") по вашему выбору, чтобы включить эти сущности в запрос, либо вам нужно явно вызвать .Load("OtherEntity") в вашем EntityContext для загрузки этой сущности.

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

В связи с высоким спросом среди пользователей предстоящий выпуск EF v4 (который будет выпущен с .NET 4.0 ближе к концу 2009 года) будет поддерживать автоматическую отложенную загрузку - если вы захотите ее использовать. Вам необходимо явно включить его, так как он по умолчанию выключен:

context.ContextOptions.DeferredLoadingEnabled = true;

См. Некоторые статьи об этой новой функции:

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