我有一个与其他对象有很多关系的对象,在本例中是“UserProfile”。
所有关系都设置为“虚拟”,如下所示:
public virtual ICollection<BillingProfile> BillingProfiles { get; set; }
不知何故,当我调用类似这样的东西时,EF中的延迟加载总是为它返回“null”:
UserProfile profile = profileRepository.Get(userId);
BillingProfile billingProfile = profile.BillingProfiles.GetFirstOrDefault(bp => bp.isDefault);
当我使用
时也是如此profile.BillingProfiles.ToList();
另一方面,当我使用Eager Loading并在查询中包含“BillingProfiles”时,它似乎按预期工作。
知道我在这里做错了吗?
这是我使用的存储库方法:
public IQueryable<UserProfile> Users
{
get { return context.UserProfiles; }
}
由于延迟加载不能正常工作,我需要包含几乎所有的关系,这是非常不理想的:
public UserProfile Get(int userId)
{
UserProfile user = Users.Include(u => u.Subscriptions.Select(s => s.SubscriptionStatus))
.Include(u => u.Subscriptions.Select(s => s.SubscriptionAttributeValues))
.Include(u => u.Orders.Select(o => o.OrderLines.Select(ol => ol.Product)))
.Include(u => u.Orders.Select(o => o.OrderStatu))
.Include((u => u.Orders.Select((o => o.CreditTransactions))))
.Include(u => u.ShippingProfiles.Select(sp => sp.Address.State))
.Include(u => u.BillingProfiles)
.Include(u => u.BillingProfiles.Select(bp => bp.Address))
.Include(u => u.Campaigns)
.Include(u => u.CreditTransactions)
.FirstOrDefault(u => u.Id == userId);
return user;
}