EF不会延迟加载视图

时间:2012-04-21 08:32:32

标签: c# linq entity-framework dbcontext entity-framework-4.3

我有一个方法可以从我的数据库中的View中获取整个数据:

public IQueryable<vw_FullWebIgnoringApprovalStatus> GetAllFullWebIgnoringApprovalStatus() 
{
    IQueryable<vw_FullWebIgnoringApprovalStatus> query = 
        Context.vw_FullWebIgnoringApprovalStatus;

    return query;
}

当我执行以下方法时,它会立即执行不应该执行的查询:

var model = _repo.GetAllFullWebIgnoringApprovalStatus()
    .Where(x =>
        (!reid.HasValue && !destid.HasValue && !coid.HasValue) ||
        (reid.HasValue && x.Reid == reid.Value) ||
        (destid.HasValue && x.Destid == destid.Value) ||
        (coid.HasValue && x.Coid == coid.Value)
    );

它应该延迟加载查询而它没有。它与视图有关吗?我正在使用EntityFramework.4.3.1。

1 个答案:

答案 0 :(得分:2)

我不相信LINQ to Entities会识别HasValue因为无法将其转换为SQL。因此,我认为在这种情况下,L2E必须先执行查询才能评估HasValue。我之前没有见过这种特殊的行为。我需要找到另一种表达你的可空性测试的方法。我有兴趣看到SQL。

这是一个有趣的想法: http://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/56484ed7-9664-44f4-84a0-69da3901c817

LINQ周围存在各种奇怪的行为,所以你必须真正关注结果 - &gt; http://msdn.microsoft.com/en-us/library/bb738687.aspx

HTH 朱莉