У меня есть 2 класса (Пользователь и устройство), как определено ниже.EntityFramework Explicit Loading не извлекает все объекты
public class User {
public int UserId { get; set; }
public virtual ICollection<Device> Devices { get; set; }
...
}
public class Device {
public int UserId;
public virtual User User { get; set; }
...
}
У меня есть хранилище для каждого из этих двух сущностей, и я отключил отложенную загрузку в моем контексте данных, например, так.
public class MyDbContext : DbContext
{
public MyDbContext()
: base(name=MyDbContext)
{
this.Configuration.LazyLoadingEnabled = false;
}
}
Я пытаюсь получить для всех устройств, связанных с учетной записью пользователя.
Я попытался сделать это двумя разными способами.
Подход # 1 - Вызов нагрузки на пользователя, связанный собственности
using (MyDbContext dbContext = new MyDbContext())
{
// performing some database operations ...
var user = dbContext.Users.Find(8);
// do some operations
if (user.Devices == null or user.Devices.Count() ==0)
dbContext.Entry(user).Collection(u => u.Devices).Load();
var devices = user.Devices;
}
Подход № 2 - Извлечение из множества устройств с помощью которых
using (MyDbContext dbContext = new MyDbContext())
{
// performing some database operations ...
var user = dbContext.Users.Find(8);
// do some operations
if (user.Devices == null or user.Devices.Count() ==0)
var devices = dbContext.Devices.Where(d => d.UserId == user.UserId).ToList();
}
По какой-то причине, подход # 1 не всегда получить все устройства, однако подход №2 получает все устройства! Может кто-нибудь, пожалуйста, объясните мне, что я делаю неправильно?
Я начал профайлер SQL Server, чтобы узнать, что я делаю что-то неправильно. Запросы, которые генерировались обоими подходами, были идентичны. Поэтому я действительно смущен тем, что я делаю неправильно!
Какая версия Entity Framework? –
Entity Framework 5 –