问题标签 [dapper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3487 浏览

dapper - 继承和 Dapper.net

我决定使用 Dapper.net,因为它似乎只做我想做的事:映射,我不需要任何花哨的东西,我只是无聊地处理我的数据读取器和我的对象之间的映射。

我的问题 :

假设我有这些课程:

这些表:

所以我想知道如何在同一个查询中选择我的 Foo 和 Bars ?

到目前为止我唯一的想法是

  • 选择所有不是 Bars 的 Foos
  • 然后选择所有酒吧

我不能使用“查询”方法的重载,因为这里只是用于映射关系。

0 投票
10 回答
145613 浏览

.net - SELECT * FROM X WHERE id IN (...) with Dapper ORM

当 IN 子句的值列表来自业务逻辑时,使用 Dapper ORM 编写带有 IN 子句的查询的最佳方法是什么?例如,假设我有一个查询:

commaSeparatedListOfIDs是从业务逻辑传入的,它可以是任何类型的IEnumerable(of Integer). 在这种情况下,我将如何构建查询?我必须做到目前为止我一直在做的事情,基本上是字符串连接,还是有某种我不知道的高级参数映射技术?

0 投票
1 回答
334 浏览

c# - 具有复杂低音类的控制台应用程序中的 Razor 视图引擎

我正在使用 Razor 视图引擎来呈现一些 HTML,然后这些 HTML 将存在于 XML 文档中。我正在使用的基类有许多属性,以及一个静态方法,它将返回该对象的列表(使用 Dapper 填充列表)。我在执行该方法时遇到了麻烦,因为它需要返回基类,这是一个抽象类。一些示例代码如下。

基本上我的调用PersonData.GetPeople()失败了,因为 PersonData 类是抽象的。任何想法将不胜感激。我使用此处的示例作为我的指南。

0 投票
3 回答
6652 浏览

c# - 使用 dapper.net 返回 mysql LAST_INSERT_ID() 时强制转换无效

此问题已在此处针对 MSSQL 进行了介绍:

如何使用 Dapper 执行插入并返回插入的标识?

但此解决方案不适用于 mysql。

LAST_INSERT_ID()使用 mysql 将整数转换为整数,您必须这样做:

SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);

堆栈跟踪是:

有没有人在 MySQL 中解决了这个问题?

编辑:

我已经设法通过以下方式完成这项工作:

也许不理想,但它有效。

0 投票
3 回答
21876 浏览

c# - 如何创建具有动态确定属性名称的匿名对象?

给定一个值数组,我想创建一个具有基于这些值的属性的匿名对象。属性名称只是数组中值的索引在"pN"哪里。N

例如,给定

object[] values = { 123, "foo" };

我想创建匿名对象

new { p0 = 123, p1 = "foo" };

我能想到的唯一方法是使用 a switchorif链接到合理数量的参数来支持,但我想知道是否有更优雅的方法来做到这一点:

背景

我有一组现有的方法可以对数据库执行 sql 语句。这些方法通常采用stringsql 语句和params object[]参数(如果有)。理解是,如果查询使用参数,它们将被命名为@p0, @p1, @p2, etc.

例子:

这将被称为:

现在我想在这个类中使用Dapper来包装和公开 Dapper 的Query<T>方法,并以与现有方法一致的方式这样做,例如:

但 Dapper 的Query<T>方法采用匿名对象中的参数值:

导致我关于创建匿名对象以将参数传递给 Dapper 的问题。


DynamicParameter按照@Paolo Tedesco 的要求使用该类添加代码。

在 Dapper 的 SqlMapper.cs 文件的第 581 行抛出异常:

例外是SqlException

必须声明标量变量“@p0”。

并检查cmd.Parameters属性显示没有为命令配置的参数。

0 投票
1 回答
1319 浏览

architecture - 存储库模式 Where 和轻量级 ORM

对于我的 IRepository,我想:

  1. 让它可以被 dapper、petapoco、mass 等微型生物使用……用于 SPEED
  2. 要在服务器上运行 where 子句,希望使用 Expression/IQueryable 样式(这也是非常可交换的)

有可能两者兼得吗?您将如何为微组织编写 IRepository Where?微型 ORM 是否适用于大到需要存储库的项目?

我需要速度和交换能力。如果没有一个好的地方,我的存储库模式就毫无价值,对吧?

0 投票
2 回答
2028 浏览

c# - 从抽象类引用继承的 EntitySet 的 dapper PropInfo Setter 为 null

我正在尝试用一些简洁的查询替换讨厌的 LINQ 2 SQL 命中以提高性能。这样做时,我必须将一堆不同的对象编织在一起,以创建一个大对象,以保存我需要的所有 ASN 信息信息。

我目前遇到的问题是一个抽象类 Orders,这个类是由两个单独的类 AutionOrder 和 MerchantOrder 使用鉴别器属性实现的。

由于我不能使用 dapper 创建一个抽象类的对象,我改为使用其中一个公共类。但是,当它去构建对象时,它在它内部失败的GetSettableProps是找到正确的DeclaringType,但是GetProperty当它正在寻找一个属性时,该方法返回 null 是internal或者是一个EntitySet. 我试图破解它使用t.BaseType.GetProperty以及p.GetAccessors().First().GetBaseDefinition().DeclaringType.GetProperty(p.Name).GetSetMethod(true)没有成功。

虚拟对象:

命令

OrderID、姓名、地址、RowVersion(内部)、Shipments(EntitySet)、OrderDetails(EntitySet)、Customer(EntityRef)

运输

ShipmentID、OrderID、TrackingNumber

订单详细信息

OrderDetailID、OrderID、产品、数量、价格

顾客

客户 ID、姓名、

对于这个特定的 SQL 命中,我试图获取一些我需要的 1 对 1 关系映射。

SELECT o.* from Orders as o left join Customers as c on o.CustomerID = c.CustomerID where o.OrderID in (1,2,3);

这就是我用来利用 dapper 并让它发挥作用的方法:

如果我将 Order 更改为公共课程,则此问题会消失,但这不是预期的副作用。尝试为 RowVersion 设置 propInfo 时失败 - 将其切换为 public 而不是 internal 解决了这个问题 - 尽管不需要。但是当它试图为 Order 创建 Shipments 对象时它会失败。同样,当 Order 是公共类时,这些都不是问题。

此外,我正在执行单独的查询以引入多对一关系,例如 Shipments 到 Orders 和 OrderDetails 到 Orders 并将结果规范化为适当的 Order 对象。MerchantOrder 几乎是一个没有真正特殊逻辑的空类。这里的区别在于我们最终如何找到在实际 SQL 命中之前抽象出来的 CustomerID。

此外,我正在使用截至 2011 年 12 月 20 日的最新版本的 dapper。

我真的很喜欢小巧玲珑,但这个问题让我头晕目眩 - 所以感谢您的帮助!

0 投票
1 回答
171 浏览

sql - 如何调用 L2S 提供者以 Func 的形式翻译谓词到 SQL where 子句?

我在我的应用程序中使用 L2S,但我越来越多地切换到dapper.net,因为我在查询性能和烦人的n+1 选择问题上遇到了重大问题。

它工作正常,但我想念过滤数据时舒适的 LINQish 编写谓词的风格。

所以我的问题是,我如何将形式的谓词转换Func<T, bool>为 SQL Server where 子句以将其与 dapper 一起使用?

我认为以前一定有人这样做过,还是所有精巧的用户都手动编写了他们的 sql 语句?

正如标题所暗示的,也许可以选择为 SQL Server 调用 LINQ2SQL 提供程序?

基本上我正在寻找类似动态linq的逆的东西。

0 投票
0 回答
2099 浏览

.net - Dapper:多次执行一个命令和 linq 和 ToArray

根据dapper docs可以写

我尝试使用

但是在 Dapper 代码中出现异常 “DynamicMethod 的类型所有者无效”

我是在尝试编写太聪明的代码还是误解了其他内容?偶然发现了一个错误?

我在 Win7 上运行 Dotnet3.5。

0 投票
4 回答
68879 浏览

c# - 在 Dapper.NET 中调整 CommandTimeout?

我正在尝试通过 Dapper 的存储过程运行 SQL 备份(我的应用程序的其余部分使用 Dapper,所以我更愿意让这部分也通过它运行)。在 CommandTimeout 启动之前它工作得很好。

我知道的唯一 CommandTimeout 设置是在 SqlCommand 中。有没有办法通过 Dapper 进行设置?