c# - 使用 EF 立即执行

标签 c# linq entity-framework lambda

我有这段代码,它执行通过 EF EDM 映射的存储过程。

meTest<MCTEntities, ObjectResult<retrieveMedia_Result>>(u => u.retrieveMedia(campaign_id: 1), ConnectionResolver.MCT_DB_Connection);

方法:

public static TValue meTest<U, TValue>(Func<U, TValue> func, String connection)
            where U : ObjectContext, new()
        {
            using (U entitiesContext = (U)Activator.CreateInstance(typeof(U), new[] { connection }))
            {
                return func(entitiesContext);
            }
    }

问题是retrieveMedia 返回 ObjectResult<retrieveMedia_Result>这是通过延迟执行完成的,会导致错误:Calling 'Read' when the data reader is closed is not a valid operation.

现在,我知道我可以调用 ToList() 或 ToArray(),但是还有其他方法可以强制立即执行吗?

我不确定类型转换 ObjectResult<retrieveMedia_Result>List<retrieveMedia_Result>是正确的做法。

最佳答案

ToList 和 ToArray 都枚举集合,这就是导致执行查询的原因。AsEnumrable 完成查询构建(即您不能再向查询添加位),但在枚举集合之前它不会实际执行。

在您的示例中,枚举您的集合的任何操作都将检索数据。例如 foreach。

关于c# - 使用 EF 立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554713/

相关文章:

c# - 另一个 System.InvalidOperationException : Sequence contains no elements (using . Any())

c# - 使用拥有的类型时,Entity Framework Core 尝试连接到不存在的表

c# - 如何将 XmlIncludeAttribute 应用于 TypeBuilder?

c# - 转换为中欧标准时间的 UTC 提前 2 小时而不是 1 小时

c# - 当 DataGrid 中自动生成列为 true 时如何进行文本换行

c# - 如何使用 LINQ C# 筛选内部集合

c# - LINQ 中是否有 "None()"的等价物?

c# - 测量每个 Entity Framework 查询的时间

asp.net-mvc - 如何防止在DataFirst First模型中删除DataAnnotations属性

c# - 另一个 DLL 中的系统命名空间