Entity Framework 4 нетерпеливая загрузка не работает вообще! - PullRequest
0 голосов
/ 03 марта 2011

Я конвертирую linq2sql в структуру

Во время конвертации мне нужно было конвертировать loadwith linq2sql с помощью include для загрузки eagar, но активная загрузка не работает. Когда я использовал профилировщик, я обнаружил, что дочерние объекты загружены, и к ним обращаются.

DataBaseEntities context = new V3C_DataBaseEntities();

context.Agents.Include("Account");

Agent ag = context.Agents.Where(x => x.Login_ID == "2").SingleOrDefault(); 

// here the account should have been loaded,
// but actually they are loaded with the line below this is executed.

Console.WriteLine(ag.Account.ID.ToString());

Если сделать следующее, Это работает отлично, но я должен сделать так, как указано в вопросе.

var c = (from ag in context.Agents.Include("Account")
                     where ag.Login_ID == "2"
                     select ag).SingleOrDefault();

Я бы также хотел использовать безопасный для загрузки тип дочерних объектов

Ответы [ 2 ]

4 голосов
/ 03 марта 2011

Вы не можете сделать это, как вы написали в вопросе.Вы должны использовать include в запросе .При преобразовании Linq2Sql в EF нет плавного движения.Вы должны принять новый API и использовать его правильно.

Вы можете использовать только это:

var query = context.Agents.Include("Account");
Agent ag = query.Where(x => x.Login_ID == "2").SingleOrDefault(); 

Если вы хотите использовать безопасный тип, включите версию, которую вы должны загрузить Функция Entity Framework CTP5 или написать свое собственное расширение .

0 голосов
/ 03 марта 2011

Это ваш запрос, который не выполняет энергичную загрузку:

context.Agents.Include("Account");

Agent ag = context.Agents.Where(x => x.Login_ID == "2").SingleOrDefault();

Если вы измените запрос, чтобы поместить Include в выражение, полагаю, вы получите желаемые результаты.

Agent ag = context.Agents
                  .Include("Account")
                  .Where(x => x.Login_ID == "2").SingleOrDefault();

В моем тестировании, и я посмотрел на полученный сгенерированный SQL, первое выражение не включается в связанную таблицу.Ваш Include игнорируется, поскольку он не является частью выражения запроса.

...