【问题标题】:Dapper ORM and Paging and Sorting ExtensionDapper ORM 和分页和排序扩展
【发布时间】:2012-04-02 20:14:14
【问题描述】:

我将 Dapper 用于可用于 Oracle 和 SQL 服务器的通用 DAL。提供分页和排序方法以使其适用于 SQL 和 Oracle 而无需手动创建/更改 SQL 语句的最佳方法是什么? 比如:

var users= Dapper
           .Query<User>(sqlStatment
                        .Skip(10)
                        .Take(10)); // where sqlStatment string

【问题讨论】:

  • 我不知道您是否使用通用方法帮了自己一个忙。 Oracle 有 ROWNUM 而 SQL Server 有 TOP / ROW_NUMBER()。我会为两者中的每一个实现一个规范。

标签: dapper


【解决方案1】:

正如@Alex 指出的那样,分页在您选择的两个数据库上的执行方式不同,因此获得最优化查询的最佳方法是为每个数据库编写单独的查询。

最好创建两个数据提供程序程序集,每个程序集服务于每个数据库:

  • Data.Provider.Sql
  • Data.Provider.Oracle

然后将您的应用程序配置为两者之一。我还特意创建了Data.Provider 命名空间(它可以是一些Data 程序集的一部分,并定义了上层提供者实现的所有数据提供者接口(在Data.Provider 内)。

【讨论】:

  • 谢谢罗伯。我可能会为每种类型创建不同的 SQL 语句,并且仍然使用相同的类/方法。
  • @Shuaib:我建议您宁愿使用建议的接口,因为这将使您的代码可以通过 IoC 轻松测试。并且在上层使用它们时总是参考这些接口。您的接口应定义完成数据处理要求所需的所有方法。
  • 感谢您的建议。您能否详细介绍一下这种方法的架构设计?
  • @RobertKoritnik 你的实现有什么源代码吗?
  • @Smith 没有。我的回答不是很清楚吗?根据帖子,没有任何实际代码可能,因为他们正在谈论 any 结果集的分页。我只是建议他们创建三个命名空间:Data.ProviderData.Provider.SqlData.Provider.Oracle。第一个应该定义所有类型(接口和抽象类),后一对命名空间将在其特定数据存储之上实现每个类型。
猜你喜欢
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2011-07-15
  • 2012-08-23
  • 2012-03-14
相关资源
最近更新 更多