如何在 ServiceStack 中使用 Dapper

Posted

技术标签:

【中文标题】如何在 ServiceStack 中使用 Dapper【英文标题】:How to use Dapper in ServiceStack 【发布时间】:2013-03-07 09:21:48 【问题描述】:

目前,我正在使用 OrmLite 进行数据库操作。我也打算使用 Dapper ORM,但是谁能告诉我如何将 DapperORM 集成到 ServiceStack 中。我是否需要使用 Dapper 和插件在容器中实现 IDbConnection 和 IDbConnectionFactory 接口。

  public override void Configure(Container container) 
        container.Register<IDbConnectionFactory>(
          c => new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["default"].ConnectionString,
                                            SqlServerDialect.Provider));

        container.Register<IDbConnection>(c => c.Resolve<IDbConnectionFactory>().OpenDbConnection()).ReusedWithin(ReuseScope.Request);

      

【问题讨论】:

【参考方案1】:

Dapper 的工作方式与 OrmLite 类似,因为它们都是底层 ADO.NET System.Data.* IDbConnection 接口的扩展方法。这意味着您可以在从 OrmLite 的 IDbConnectionFactory 检索到的 IDbConnection 上同时使用它们。

OrmLite 在 ServiceStack.OrmLite 的 ServiceStack.OrmLite.Dapper 命名空间下包含最新版本的 Dapper。


在 ServiceStack 的 v3.9.40 中,Dapper 的这个嵌入式版本的 API 已更改为包含“Dapper”后缀,以避免与同名的 OrmLite 方法发生冲突。您不必注册一个 Request-Scoped IDbConnection,因为 ServiceStack 的默认 Service 类已经为您从 IDbConnectionFactory 检索它。

鉴于此,以下是在 ServiceStack 服务中访问 Dapper ORM API 的方法:

public class MyService : Service

    public object Any(Request request)
    
        base.Db.QueryDapper(...);
        base.Db.QueryMultipleDapper(...);
        base.Db.MultiMapDapper(...);
        base.Db.ExecuteDapper(...);
    

【讨论】:

谢谢。引用 razor 库会不会有任何问题,我的应用程序只是带有休息服务的 API。 不,它只是一个库,如果您不启用 RazorFeature 插件,它不会做任何事情。 ServiceStack.Razor NuGet 包中缺少 v3.9.44,现在在哪里? 这个答案似乎不再正确。 ServiceStack.Razor.Dapper 的链接导致 404。目前,我无法找到使用“内置”Dapper 的方法。 Dapper 不再是 ServiceStack 的一部分了吗?【参考方案2】:

我不知道其他人,但由于 Razor 命名空间中有关 Dapper 的信息,这个答案让我很困惑。

如果其他人有类似的经历,我已尝试在 basic way 中回答同样的问题。

【讨论】:

以上是关于如何在 ServiceStack 中使用 Dapper的主要内容,如果未能解决你的问题,请参考以下文章

在 ServiceStack 中,我如何使用外部发布的 JWT

如何在 ServiceStack 中添加 protobuf

在 SQL Server 和 ServiceStack.OrmLite 中使用架构名称

如何使用 servicestack 类型的客户端?

如何修改 ServiceStack.OrmLite 生成的 SQL?

使用 JSON 时如何让 ServiceStack 用破折号格式化 Guid?