Получить объекты с детьми за один вызов sql. ADO.NET Entity Framework - PullRequest
0 голосов
/ 01 мая 2010

У меня есть две таблицы: A & B

B { B1: Field1, B2: Field2, ... }

A { Дети: список Б, A1: Field1, A2: Field2, }

Я хочу получить объекты "A" со связанными объектами "B", например:

DataContext.A.Select (a => новый MySubset (A1 = a.A1, Children = a.Children.Select (b => b.B1). ToList () );

Но EF не может перевести ToList в SQL, поэтому мне приходится вызывать ToList () для каждого экземпляра в запросе, производя дополнительный сетевой вызов.

Как я могу избежать этого?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 мая 2010

Вы можете использовать оператор .Include для быстрой загрузки:

http://msdn.microsoft.com/en-us/library/bb896272.aspx

Пояснение

Предполагается, что вы используете VS2010 и включена отложенная загрузка:

Когда вы загружаете A изначально, есть коллекция B, очевидно ожидающая вас от A, но это не совсем, это не List <>, это объект, который знает, как предоставить B, когда вы запрашиваете их. Только когда вы получите доступ к этой коллекции, EF отправится туда и обратно в базу данных, чтобы получить ее.

Но если вы используете .Include (), вы можете запросить, чтобы он извлекал B одновременно с извлечением A.

0 голосов
/ 01 мая 2010

Я бы использовал IEnumerable вместо List в конструкторе MySubset.

Или: создать список не .ToList (), а new List<T>(a.Children.Select(b => b.B1))

...