如何在ServiceStack中使用Dapper

时间:2013-03-18 21:09:32

标签: servicestack dapper ormlite-servicestack

目前,我正在使用OrmLite进行数据库操作。我也打算使用Dapper ORM,但任何人都可以指出我如何在ServiceStack中集成DapperORM。我是否需要将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);

      }

2 个答案:

答案 0 :(得分:10)

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

OrmLite在ServiceStack.OrmLite.Dapper名称空间下的ServiceStack.OrmLite中包含最新版本的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(...);
    }
}

答案 1 :(得分:5)

我不了解其他人,但由于有关Razor名称空间内Dapper的信息,这个答案让我很困惑。

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