Fetch和Query的区别是什么?

本文关键字:是什么 区别 Query Fetch | 更新日期: 2023-09-27 18:06:57

对我来说,PetaPoco的Database.FetchDatabase.Query似乎在做同样的事情。

例如,

var db = new PetaPoco.Database("myDB");
ProductList products = db.Fetch<ProductList>("SELECT * FROM ProductList");
ProductList products = db.Query<ProductList>("SELECT * FROM ProductList");

两者之间是否有显著差异?

Fetch和Query的区别是什么?

根据PetaPoco文档,这就是答案:

查询与获取

Database类有两种方法用于检索记录Query和Fetch。除了Fetch返回一个List<>而Query使用yield return来迭代结果,而不将整个集合加载到内存中。

如果在事务中使用Fetch和query,它们的行为会有所不同。我有一个用例,我需要在一个事务中更新几个表,但我需要在序列的中间从引用表中检索一些数据。

当我用查询检索数据时,随后的插入或更新失败,出现InvalidOperationException: "已经有一个与此命令相关的打开的数据阅读器,必须先关闭"

解决方案是用Fetch代替Query,这样我就可以完成这个序列了。

伪代码是:

BeginTransaction Update Tbl1 Update Tbl2 Query RefTblA ## Changed Query to Fetch to avoid: '...already an open DataReader..." exception Update Tbl3 using data from RefTblA CompleteTransaction