0

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

Моего стола устанавливается следующим образом:

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) прошел I n правильно, я проверю, что UserID сопоставляется с FBUserID. И я также проверил, чтобы убедиться, что fbUids.Count() > 0 ...

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

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

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

У вас есть предложения по выяснению, что не так?

+0

сообщение 'fbUid' &' fbUser 'классы, пожалуйста –

+0

Дублируемая почта, ответила в другом месте: http://stackoverflow.com/questions/1225624/how-to-select-an-object-through-a-foreign-key –

ответ

0

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

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

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

context.ContextOptions.DeferredLoadingEnabled = true; 

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

0

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

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

Помогло ли это с базы?

+0

Я как бы понимаю, что вы делаете ... но если я делаю пользователь.aspnet_Users не должны делать все выполнение sql для меня, чтобы получить этого пользователя? (Если aspnet_Users является внешним ключом). Не могли бы вы объяснить немного больше? – Matt

+0

[только] объяснение, которое я могу вам дать, это то, что я делаю выше, чтобы обойти ту же проблему, что и у вас. Вы можете использовать что-то вроде этого ._Items = new EntitySet (новое действие (this.attach_Items), новое действие (this.detach_Items)); а затем все остальное, но у меня никогда не было этого, чтобы работать и нужно было двигаться дальше. Если у вас есть LinqToSql.dbml, проверьте выше, и вы увидите, что я имею в виду. – griegs

+0

Практически невозможно использовать объединение в LINQ для Entities. Вместо этого вы почти всегда используете отношения. –