Я использую Entity Framework 4.1 и пытаюсь выбрать сущность, в то же время включая одну из связанных с ней коллекций сущностей.Это стандартный способ сделать это с помощью LINQ.(MacAddressPool один-ко-многим с AllowedPartNumbers.)
var query =
from p in MacAddressPools.Include( "AllowedPartNumbers" )
where p.MacAddressPoolID == 2
select p;
var pool = query.FirstOrDefault();
Console.WriteLine( pool.AllowedPartNumbers.IsLoaded );
"True"
Вместо этого я мог бы захотеть сделать это, чтобы получить другие данные одновременно:
var query =
from p in MacAddressPools.Include( "AllowedPartNumbers" )
where p.MacAddressPoolID == 2
select new
{
Pool = p,
AssignedMacAddressCount = pool.MacAddressAssignments.Count( a => a.AssignedDate != null )
};
var pool = query.FirstOrDefault().Pool;
Console.WriteLine( pool.AllowedPartNumbers.IsLoaded );
"False"
Почемуколлекция связанных объектов не загружена на этот раз?Неважно, если я использую анонимный тип или какой-то класс.Он не будет загружать AllowedPartNumbers.Используемая команда SQL даже не присоединяется к таблице AllowedPartNumbers.
Я обнаружил, что могу сделать это:
var query =
from p in MacAddressPools
where p.MacAddressPoolID == 2
select new
{
Pool = p,
AllowedPartNumbers = p.AllowedPartNumbers,
AssignedMacAddressCount = pool.MacAddressAssignments.Count( a => a.AssignedDate != null )
};
var pool = query.FirstOrDefault().Pool;
Console.WriteLine( pool.AllowedPartNumbers.IsLoaded );
"True"
Даже если я просто собираюсь игнорировать это свойство AllowedPartNumbersдля моего анонимного типа наличие этого параметра делает LINQ to Entities заполнять свойство AllowedPartNumbers в самом пуле.Мне даже не нужен .Include ().
Есть ли причина такого странного поведения?