Не удается получить объект пользователя из отношений внешнего ключа с помощью оператора Linq to Entities - PullRequest
0 голосов
/ 04 августа 2009

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

Мой стол настроен так:

  FBUserID long,
  UserID uniqueidentifier

поэтому мой репозиторий пытается получить пользователя, когда ему предоставлен FBUserID:

    public User getUserByFBuid(long uid)
    {
        User fbUser = null;
        IEnumerable<FBuid> fbUids = _myEntitiesDB.FBuidSet.Where(user => user.FBUserID == uid);

        fbUser = fbUids.FirstOrDefault().aspnet_Users;

        return fbUser;
    }

Я проверил, что переданный uid (FBUserID) правильный, я проверил, совпадает ли UserID с FBUserID. И я также проверил, чтобы fbUids.Count() > 0 ...

Я вернул fbUids.FirstOrDefault().FBUserID и получил правильный FBUserID, но каждый раз, когда я пытаюсь вернуть aspnet_Users или aspnet_Users.UserName и т. Д., Я ничего не получаю. (Я предполагаю, что по какой-то причине он получает ошибку)

У меня не настроена отладка должным образом, поэтому, возможно, поэтому у меня так много проблем ... но пока все проверки, которые я делал, я выполняю return this.Json(/* stuff returned form the repository */), чтобы я мог сделать предупреждение, когда он возвращается к JavaScript.

Кто-нибудь знает, почему у меня возникнут проблемы с извлечением объекта пользователя из отношения внешнего ключа, подобного этому?

Или у вас есть какие-либо предложения, чтобы выяснить, что не так?

Ответы [ 2 ]

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

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

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

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

context.ContextOptions.DeferredLoadingEnabled = true;

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

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

Не знаю, если это то, что вы просите, но я делаю объединение, как это;

var votes = from av in dc.ArticleVotes
  join v in dc.Votes on av.voteId equals v.id
  where av.articleId == articleId
  select v;

Это помогло или я не в базе?

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