EF - Lazy Loading无法正常工作 - 始终返回null

时间:2013-12-16 20:12:07

标签: c# .net entity-framework

我有一个与其他对象有很多关系的对象,在本例中是“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;
}

0 个答案:

没有答案