如何在 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
在 SQL Server 和 ServiceStack.OrmLite 中使用架构名称