【问题标题】:ServiceStack MARS (Multiple Active Result Sets) using ORMLite and Output Parameters使用 ORMLite 和输出参数的 ServiceStack MARS(多个活动结果集)
【发布时间】:2013-05-19 20:37:42
【问题描述】:

ServiceStack ORMLite 很棒,我通常会避开 ORM 的心态,更喜欢构建数据库,因为构建数据库而不是 1:1 类模型是有意义的。也就是说,有几件事我似乎遇到了困难,我敢肯定这只是我的无知。

第一:

有没有办法使用 ORMLite 管理多个结果集?我知道可以通过 Dapper 使用 QueryMultiple 方法,但无论出于何种原因,我都在花时间弄清楚如何使用 ServiceStack 的内置 Dapper 实现。

第二:

有没有办法使用 ORMLite 在存储过程调用中返回输出参数?

理想情况下,我想避开 MARS 和输出参数,理想情况下我想生活在一个理想的世界中:)

我正在使用 .NET 框架 4.5、SQL Server 2008 R2 和 ServiceStack 3.9.46。

【问题讨论】:

    标签: stored-procedures servicestack dapper ormlite-servicestack sql-server-mars


    【解决方案1】:

    事实证明,这真的很简单(前提是你知道实现它的魔力)。

    基于documentation 和一个看似误导性的帖子,表明Dapper is "included" in razor 我认为当暗示 Dapper 是“内置”时,它本质上是包含库的一部分。

    如果你愿意就笑一笑,但对于我们这些没有开悟的人,我将概述如何让 Dapper 扩展出现。所以这就是魔法。

    使用包管理器控制台执行以下操作:

    Install-Package ServiceStack
    Install-Package Dapper
    

    将以下 using 语句 (C#) 添加到您的服务中:

    using ServiceStack.OrmLite;
    using Dapper;
    

    现在,当您利用 Db 对象时,所有 OrmLite 和 Dapper 方法都将存在。

    要获取输出参数,现在很简单:

    var p = new DynamicParameters();
    
    p.Add("@param1", request.stuff1);
    p.Add("@param2", request.stuff2);
    p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);
    
    Db.Execute("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);
    
    response.outputStuff = p.Get<int>("@param3");
    

    为了管理 MARS(假设您有一个返回两个结果集和一个输出参数的 SP):

    p.Add("@param1", request.stuff1);
    p.Add("@param2", request.stuff2);
    p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);
    
    var mars = Db.QueryMultiple("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);
    
    //firstSet contains the first result set
    var firstSet = mars.Read().ToList();
    //secondSet contains the second result set
    var secondSet = mars.Read().ToList();
    
    response.outputStuff = p.Get<int>("param3");
    

    它非常简单,一旦你知道了魔法:)

    这是much more complicated example

    希望这可以帮助其他人并节省他们一些时间。

    【讨论】:

    • 数据库连接如何初始化?我在任何地方都找不到这样的例子。
    猜你喜欢
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多