, предполагающая У меня есть три EF классов сущностей:Linq запись (entity.Related) .Query.Load() не писать обратно в коллекции собственность
public class Person { ... public ICollection Vehicles { get; set; } } public class Vehicle { ... public Person Owner { get; set; } public CarModel ModelInfo { get; set; } } public class CarModel { ... // properties for make, model, color, etc }
Свойство Person.Vehicles
лениво загруженные.
Предположим, у меня есть уже загруженный экземпляр Person
, и я хочу загрузить его имущество для сбора Vehicle
, так что он также включает в себя соответствующее имущество ModelInfo
.
Так что у меня это:
void LoadVehiclesAndRelated(MyDbContext dbContext, Person person)
{
dbContext.Entry(person)
.Collection(p => p.Vehicles)
.Query()
.Include(v => v.ModelInfo)
.Load();
}
Используется как так:
using(MyDbContext dbContext = ...) {
Person p = GetPerson(123);
LoadVehiclesAndRelated(dbContext, p);
}
foreach(Vehicle v in p.Vehicles) {
Console.WriteLine(v.ModelInfo);
}
Однако, когда я делаю это, я получаю исключение во время выполнения, когда он сначала вычисляет выражение p.Vehicles
, потому что свойство на самом деле пуст (поэтому он хочет загрузить его), но теперь DbContext удаляется.
Когда .Load()
был сделан звонок (внутри LoadVehiclesAndRelated()
я видел SQL выполняется на сервере (в SQL Server Profiler), но свойство коллекции остается пустым.
Как я могу затем загрузить свойство и с Include
г подсвойства
Досадно, этот сценарий не упоминается в руководстве MSDN для явной загрузки: https://msdn.microsoft.com/en-us/data/jj574232.aspx
Просто для ясности, 'переменная dbContext' внутри' LoadVehiclesAndRelated' так же, как объемлющий 'используя (MyDbContext контекста = ...' –
@IvanStoev Да? - Я добавлю разъяснение на мой вопрос – Dai