我有2類(用戶和設備)定義如下。的EntityFramework顯式加載不檢索所有實體
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)
var devices = dbContext.Devices.Where(d => d.UserId == user.UserId).ToList();
}
出於某種原因,方法#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調用load檢索所有設備,但方法#2檢索所有設備!有人能解釋我做錯了什麼嗎?
我開始的SQL Server Profiler來看看我是否做錯了什麼。兩種方法生成的查詢都是相同的。所以我很困惑我做錯了什麼!
什麼版本的實體框架? – 2014-09-02 15:06:22
實體框架5 – 2014-09-02 15:28:58