我首先使用 EF6 的代码,但似乎无法让延迟加载工作。预加载工作正常。我有以下课程:
public class Merchant : User
{
...
public virtual ICollection<MerchantLocation> 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<Merchant>.First();
merchant.MerchantLocations.ShouldNotBeNull(); // fails
}
}
然而,急切加载工作正常:
public void Test_Eager_Loading() {
using (var context = new MyDbContext()) {
var merchant = context.Users.OfType<Merchant>.Include("MerchantLocations").First();
merchant.MerchantLocations.ShouldNotBeNull(); // passes
}
}
MerchantLocations
被标记为public virtual
所以我不确定问题是什么。我还在我的中添加了以下内容DbContext
构造函数:
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
编辑:我还注意到merchant
上述测试中返回的对象不是 EF 代理。它是一个平原Merchant
。我怀疑这是造成问题的原因。
我意识到问题在于 Merchant 类不满足代理生成的要求。具体来说,我需要添加一个受保护的无参数构造函数。我只有一个私人的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)