EF Code First Lazy loading不工作
我首先使用EF6代码,但似乎无法使延迟加载工作。 急切的装载工作正常。 我有以下课程:
public class Merchant : User { ... public virtual ICollection MerchantLocations { get; set; } } public class MerchantLocation : BaseEntity { ... public int MerchantId { get; set; } public virtual Merchant Merchant { get; set; } } public class User : BaseEntity { ... } public class BaseEntity { ... public int Id { get; set; } }
我通过以下代码测试我的延迟加载位置(失败):
public void Test_Lazy_Loading() { using (var context = new MyDbContext()) { var merchant = context.Users.OfType.First(); merchant.MerchantLocations.ShouldNotBeNull(); // fails } }
然而,急切的加载工作正常:
public void Test_Eager_Loading() { using (var context = new MyDbContext()) { var merchant = context.Users.OfType.Include("MerchantLocations").First(); merchant.MerchantLocations.ShouldNotBeNull(); // passes } }
MerchantLocations
被标记为public virtual
所以我不确定问题是什么。 我还在我的DbContext
构造函数中添加了以下内容:
Configuration.LazyLoadingEnabled = true; Configuration.ProxyCreationEnabled = true;
编辑:我还注意到在上述测试中返回的merchant
对象不是EF代理。 这是一个普通的Merchant
。 我怀疑这是导致问题的原因。
我意识到问题是Merchant类不符合代理生成的要求。 具体来说,我需要添加一个受保护的无参数构造函数。 我只有一个私人的。