我有这段代码,它执行通过 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/