gpt4 book ai didi

c# - Dapper.NET 如何在内部使用 .Count() 和 SingleOrDefault()?

转载 作者:行者123 更新时间:2023-11-30 15:22:16 25 4
gpt4 key购买 nike

虽然我了解 ORM 和 DAL,并且之前已经使用 NHibernate 实现了 DAL,但我是 Dapper 的新手。

示例查询:-

string sql = "SELECT * FROM MyTable";
public int GetCount()
{
var result = Connection.Query<MyTablePoco>(sql).Count();
return result;
}

Dapper 会将此查询(内部)转换为 SELECT COUNT(*) FROM MyTable 最后查看 .Count() 吗?

同样,在 SingleOrDefault() 的情况下,它会转换为 SELECT TOP 1 * FROM MyTable 吗?

我来自 NHibernate 世界,它会相应地生成查询。不过我不确定 Dapper。当我使用 MS Access 时,我看不到检查生成的查询的方法。

最佳答案

不,dapper 不会调整您的查询。直接告诉这个的方法很简单:方法是否返回 IEnumerable...对比IQueryable... ?如果是第一个,那么它只能使用本地内存机制。

具体来说,默认Query实际上会返回一个完全填充的 List<> . LINQ 的 Count()方法识别并访问 .Count列表的属性。所以所有的数据都是从数据库中获取的。

如果你想向数据库询问计数,向数据库询问计数

至于查看实际发送到数据库的内容的机制:我们为此使用 mini-profiler。效果很好。

注意:当您只查询一行时:QueryFirstOrDefault (以及您期望的其他变体)存在并在内部进行了优化(包括对 ADO.NET 的提示,尽管并非所有提供程序都可以对这些事情采取行动)以尽可能高效地做事,但它不会 调整您的查询。在某些情况下,提供者本身(不是小巧的)可以提供帮助,但最终:如果您只想要第一行,向数据库询问第一行(TOP 或类似的)。

关于c# - Dapper.NET 如何在内部使用 .Count() 和 SingleOrDefault()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35956149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com