C# EF不延迟加载视图

C# EF不延迟加载视图,c#,linq,entity-framework,dbcontext,entity-framework-4.3,C#,Linq,Entity Framework,Dbcontext,Entity Framework 4.3,我有一种方法,可以从数据库中的视图获取全部数据: public IQueryable<vw_FullWebIgnoringApprovalStatus> GetAllFullWebIgnoringApprovalStatus() { IQueryable<vw_FullWebIgnoringApprovalStatus> query = Context.vw_FullWebIgnoringApprovalStatus; return

我有一种方法,可以从数据库中的视图获取全部数据:

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

    return query;
}

它应该延迟加载查询,但没有加载。它与视图相关吗?我使用的是EntityFramework.4.3.1。

我不相信HasValue被LINQ识别为实体,因为无法将其转换为SQL。因此,我认为在这种情况下,L2E必须先执行查询,然后才能计算HasValue。我以前从未见过这种特殊的行为。我认为你需要找到另一种方式来表达你的可空性测试。我想看看SQL

这里有一个有趣的想法:

LINQ在nullables周围有各种奇怪的行为,因此您必须真正关注结果->


julie

我同意它不应该“立即执行查询”。您觉得它有什么作用?@NicholasButler SQL Profiler,它向我展示了此操作从表中获取248行,完成此操作大约需要6秒。@LukeMcGregor为什么需要POCO模型类?@tugberg您需要每个用虚拟对象标记的nav属性lazyloading@LukeMcGregor我明白了,但这里面没有导航属性模型<代码>字符串,
int
int?
bool?
是它所有的类型。啊,是的。可能就是这样。我将测试它,看看它是否有问题。谢谢好的,这就是问题所在。我一删除LINQ
Where
子句,它就开始延迟加载。但是,显然我在上面的查询之后触发的分页逻辑还有其他问题。再次感谢!我想你知道这一点,但我只是想确保未来的读者不会误认为这是因为有Where子句造成的。问题应该特定于Where子句中的HasValue。您是否可以验证这是否适用于更简单的Where子句,它不会导致它执行查询,直到您专门做了一些事情来触发执行。是的,它会使用更简单的Where子句延迟加载,如:
\u repo.GetAllFullWebIgnoringApprovalStatus()。其中(x=>x.CoID==1000)
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)
    );