Dapper ORM和分页排序扩展

3

我正在使用Dapper作为通用的数据访问层,可以同时用于Oracle和SQL Server。那么,如何提供分页和排序方法,以便在不手动创建/更改SQL语句的情况下,同时适用于SQL和Oracle呢?类似于:

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

我不确定使用通用方法是否有益于您。Oracle 有 ROWNUM,而 SQL Server 则有 TOP / ROW_NUMBER()。我会为这两个实现一个规范。 - Alex
1个回答

0
正如 @Alex 指出的那样,你选择的两个数据库进行分页的方式是不同的,因此为了获得最优化的查询,你最好为每个数据库编写单独的查询语句。
最好创建两个数据提供程序程序集,分别为每个数据库提供服务:
  • Data.Provider.Sql
  • Data.Provider.Oracle

然后为其中之一配置您的应用程序。我故意创建了Data.Provider命名空间(可以是某个Data程序集的一部分),并定义了所有数据提供程序接口(在Data.Provider中)以供上层提供程序实现。


谢谢 Rob。我可能会为每种类型创建不同的 SQL 语句,但仍然使用相同的类/方法。 - Shuaib
@Shuaib:我建议你按照提议使用接口,因为这样可以通过 IoC 轻松地测试您的代码。并且在上层使用时始终引用这些接口。您的接口应定义完成数据处理要求所需的所有方法。 - Robert Koritnik
谢谢您的建议。您能详细介绍一下这种方法的架构设计吗? - Shuaib
@RobertKoritnik 你的实现是否有任何源代码? - Smith
@Smith 不是吗?我的回答不清楚吗?根据帖子,实际上没有任何可能的代码,因为他们正在讨论任何结果集的分页。我只是建议他们创建三个命名空间:Data.ProviderData.Provider.SqlData.Provider.Oracle。第一个应该定义所有类型(接口和抽象类),后面的两个命名空间将在其特定数据存储之上实现每个类型。 - Robert Koritnik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接