2016-02-12 4 views
0

В моей модели у меня есть корень агрегата User, каждый из которых имеет набор связанных Transactions. Каждый Transaction имеет свойство обратной навигации User.Загрузка связанных объектов в репозиторий с использованием EntityFramework

мне нужно получить все Transactions сразу, и это привело в следующем запросе в моем UserRepository

public ICollection<ITransaction> GetAllTransactions() { 

    return (from u in Set.Include("Transactions") 
      from t in u.Transactions 
      select t).ToList();  
} 

Set является IDbSet<User> из контекста EF.

Проблема в том, что lazy-load не реализована (и я не хочу ее реализовать), а свойство Transaction.User после запроса - null. Все правильно отображается EF.

В чем заключается запрос на получение всего Transactions с ненулевым User?

Я использую EF6.

+1

Если вы хотите 'свойство User' быть заселены, то вам нужно для' .INCLUDE («User») 'на ваши сделки. Попробуйте 'from t в u.Transactions.Include (« Пользователь »)' вместо 'from t в u.Transactions'. – Maarten

+0

Что такое 'Set'? –

+0

Можете ли вы не просто сделать что-то вроде 'select new t, t.User' – markpsmith

ответ

1

Необходимо на самом деле IncludeTransaction.User. Это может быть сделано после окончательной проекции на Transaction как этот

public ICollection<ITransaction> GetAllTransactions() 
{  
    return Set.SelectMany(u => u.Transactions).Include(t => t.User).ToList();  
} 
+0

Работает отлично. – Graham

Смежные вопросы