如何使用 Dapper-dot-net 从单个 SP 映射多个记录

2023-11-23

我想在执行单个存储过程将返回 50 个多个单独的选择的情况下使用 Dapper,每个结果集都不会很宽,最多可能有 20 或 30 列。下面的代码来自 Dapper 测试,我想知道这个示例是否是一个很好的原型。

谢谢你, 斯蒂芬

public void TestMultiMap()
        {
            var createSql = @"
                create table #Users (Id int, Name varchar(20))
                create table #Posts (Id int, OwnerId int, Content varchar(20))

                insert #Users values(99, 'Sam')
                insert #Users values(2, 'I am')

                insert #Posts values(1, 99, 'Sams Post1')
                insert #Posts values(2, 99, 'Sams Post2')
                insert #Posts values(3, null, 'no ones post')";

                connection.Execute(createSql);

            var sql = @"select * from #Posts p 
                      left join #Users u on u.Id = p.OwnerId 
                      Order by p.Id";

            var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post; }).ToList();
            var p = data.First();

            p.Content.IsEqualTo("Sams Post1");
            p.Id.IsEqualTo(1);
            p.Owner.Name.IsEqualTo("Sam");
            p.Owner.Id.IsEqualTo(99);

            data[2].Owner.IsNull();

           connection.Execute("drop table #Users drop table #Posts");
    }

EDIT

这是基于 Marcs 答案的示例。

        const string sql = @"__sp_GetMISMOLoanInfo";
        using (var multi = _connection.QueryMultiple(sql, new { loannum = "3192381" }, commandType: CommandType.StoredProcedure))
        {
           var address = multi.Read<ADDRESS>().Single();
           var amortizationRule = multi.Read<AMORTIZATION_RULE>().Single();
           var appraiserLicense = multi.Read<APPRAISER_LICENSE>().Single();
           var automatedUnderwriting = multi.Read<AUTOMATED_UNDERWRITING>().Single();
           var avm = multi.Read<AVM>().Single();
           var borrowerDetail = multi.Read<BORROWER_DETAIL>().Single();
        }

这是来自主页的,但是测试中应该有类似的:

var sql = @"...";
using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var customer = multi.Read<Customer>().Single();
   var orders = multi.Read<Order>().ToList();
   var returns = multi.Read<Return>().ToList();
   ...
} 

参数等正常工作,如果指定了 CommandType,则应直接映射到定义的参数名称。

每次致电.Read<T>()涉及连续的结果网格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Dapper-dot-net 从单个 SP 映射多个记录 的相关文章

随机推荐

  • 如何使两个函数参数隐式

    假设我们有一个以函数作为参数的对象apply method object Wrapper def apply block TypeA gt String TypeA a block a TypeA是应用程序的域类型 现在 当我定义内联块时
  • JavaFX ScrollPane 以编程方式移动视口 - 使内容居中

    我可以使用 setVvalue double 和 setHvalue double 方法在 JavaFX ScrollPane 中移动视口 我正在努力做的是根据其位置将特定节点置于滚动窗格内容的中心 我尝试过 localToScene 和b
  • 如果未定义索引操作返回视图还是副本,那么 pandas 中的视图有何意义?

    我已经从 R 切换到 pandas 当我做类似的事情时 我经常得到SettingWithCopyWarnings df a pd DataFrame col1 1 2 3 4 Filtering step which may or may
  • 防止 ImageMagick 转换为灰度

    我在 Windows 上使用 ImageMagick 6 9 1 调整 PNG 文件的大小 然后再使用其他工具处理它 源文件是 RGBA 但图像数据是灰度 所有像素的 R G 和 B 值相同 看来 ImageMagick 正在检测到这一点
  • 带睡眠和不带睡眠的递归异步

    我有两个版本的异步函数 async function asyncRecurseOne i try console log i i i 1 await asyncRecurseOne i catch ex console log ex asy
  • 将元胞数组的元胞数组转换为矩阵的矩阵

    我可以将矩阵元胞数组转换为矩阵 gt gt C 1 1 2 2 3 3 gt gt cell2mat C ans 1 1 2 2 3 3 还行吧 但是 我想将包含其他元胞数组的元胞数组转换为矩阵 gt gt C 1 1 2 2 3 3 gt
  • 使用 Powershell 查找文件中的多行模式

    如何使用 Powershell 在文件中查找多行模式 例如 XML 节点的内容 也就是说 如果我正在寻找 绿色 这个词deviceDescription节点 但 XML 节点文本可能跨越多行 这是行不通的 dir r i xml selec
  • 单击动态链接时深层链接不包含有效的必需参数

    我已将动态链接设置为文档 但单击链接时它显示 Deep Link does not contain valid required params URL params cpb 1 cpt cpit fpb CJsFEPcCGgVlbi1VUw
  • Azure AD B2C 向新用户发送邀请电子邮件

    通过使用新的 Azure AD B2C 服务预览版 我希望能够向用户发送邀请电子邮件以完成 SaaS 应用程序的注册 我们的每个客户都将管理自己的用户 我希望他们能够向新用户生成邀请电子邮件 以访问我们的 SaaS 应用程序 然后该用户将完
  • 字符串形式的月份名称

    我试图以字符串形式返回月份名称 例如 五月 九月 十一月 I tried int month c get Calendar MONTH 但是 这会返回整数 分别为 5 9 11 如何获取月份名称 用这个 Calendar cal Calen
  • Azure devops 报告生成器任务找不到coverage.cobertura.xml 文件

    正如标题所示 我正在尝试让代码覆盖率在 Azure Devops Pipeline 上运行 这是管道 trigger master pool vmImage windows latest variables solution sln bui
  • 我可以运行受密码保护的只读 git 服务器吗?

    我需要一个应用程序能够从 git 存储库获取但不能推送到它 所以 这是只读部分 这可以通过 git daemon 轻松完成 最重要的是 我需要访问受密码保护的所述存储库 包括读取它 因此 在进行任何获取之前 应用程序需要进行身份验证 可行吗
  • 为什么 null 是一个对象,null 和 undefined 有什么区别?

    Why is null被认为是object在 JavaScript 中 正在检查 if object null Do something 与 if object Do something 并且 有什么区别null and undefined
  • 使用需要不记名令牌的 API 在 Python 中进行 API 调用

    寻求有关将 JSON API 调用集成到 Python 程序中的帮助 我希望将以下 API 集成到 Python py 程序中 以允许调用它并打印响应 API 指南指出必须生成不记名令牌才能允许调用 API 我已成功完成此操作 但是 我不确
  • 有没有办法用 simple_form for Rails 提交 ajax/json 请求

    使用标准 Rails form for 我能够通过 select 和 collection select 帮助器传递 ajax 请求 如下所示 我似乎不知道如何做到这一点简单的形式 弄清楚了 你只需要添加这个 input html gt d
  • 使用 controlTransfer 方法设置奇偶校验

    有人知道如何在 Android 中设置与 controlTransfer 的奇偶校验吗 我在任何地方都找不到此方法参数的解释 只是参考文献中的一些通用信息 我发现的一个例子说 conn controlTransfer 0x40 0x04 0
  • 浮点文字与浮点变量的奇怪编译器行为

    我注意到 C 编译器的浮点舍入 截断有一个有趣的行为 也就是说 当浮点文字超出保证的可表示范围 7 位十进制数字 时 a 将浮点结果显式转换为浮点 语义上不必要的操作 和 b 将中间计算结果存储在局部变量中都会更改输出 一个例子 using
  • Heroku 和 GitHub:“无法检索项目,内部服务器错误”

    这篇文章涉及一个快速变化的事件 我只想连接到我的 GitHub 帐户 当我执行此操作时 我会在页面右上角收到以下红色小弹出窗口的错误消息 无法检索项目 内部服务器错误 截至 2022 年 5 月 25 日 19 52 世界标准时间 GitH
  • 比较两个列表的更新、删除和添加

    简单的问题 我有一个新列表和一个旧列表 在Java中是否有一个标准的方法 库允许我比较这两个列表并确定哪些项目已更新 删除或全新 例如 我最终应该得到三个列表 已删除的项目 旧的项目但不是新的项目 更新的项目 两者中的项目 新项目 新的项目
  • 如何使用 Dapper-dot-net 从单个 SP 映射多个记录

    我想在执行单个存储过程将返回 50 个多个单独的选择的情况下使用 Dapper 每个结果集都不会很宽 最多可能有 20 或 30 列 下面的代码来自 Dapper 测试 我想知道这个示例是否是一个很好的原型 谢谢你 斯蒂芬 public v