gpt4 book ai didi

stored-procedures - 使用 ORMLite 和输出参数的 ServiceStack MARS(多个事件结果集)

转载 作者:行者123 更新时间:2023-12-04 10:53:08 24 4
gpt4 key购买 nike

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

第一的:

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

第二:

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

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

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

最佳答案

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

基于 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 .

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

关于stored-procedures - 使用 ORMLite 和输出参数的 ServiceStack MARS(多个事件结果集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16639251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com