问题标签 [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.
dapper - 继承和 Dapper.net
我决定使用 Dapper.net,因为它似乎只做我想做的事:映射,我不需要任何花哨的东西,我只是无聊地处理我的数据读取器和我的对象之间的映射。
我的问题 :
假设我有这些课程:
这些表:
所以我想知道如何在同一个查询中选择我的 Foo 和 Bars ?
到目前为止我唯一的想法是
- 选择所有不是 Bars 的 Foos
- 然后选择所有酒吧
我不能使用“查询”方法的重载,因为这里只是用于映射关系。
.net - SELECT * FROM X WHERE id IN (...) with Dapper ORM
当 IN 子句的值列表来自业务逻辑时,使用 Dapper ORM 编写带有 IN 子句的查询的最佳方法是什么?例如,假设我有一个查询:
commaSeparatedListOfIDs
是从业务逻辑传入的,它可以是任何类型的IEnumerable(of Integer)
. 在这种情况下,我将如何构建查询?我必须做到目前为止我一直在做的事情,基本上是字符串连接,还是有某种我不知道的高级参数映射技术?
c# - 具有复杂低音类的控制台应用程序中的 Razor 视图引擎
我正在使用 Razor 视图引擎来呈现一些 HTML,然后这些 HTML 将存在于 XML 文档中。我正在使用的基类有许多属性,以及一个静态方法,它将返回该对象的列表(使用 Dapper 填充列表)。我在执行该方法时遇到了麻烦,因为它需要返回基类,这是一个抽象类。一些示例代码如下。
基本上我的调用PersonData.GetPeople()
失败了,因为 PersonData 类是抽象的。任何想法将不胜感激。我使用此处的示例作为我的指南。
c# - 使用 dapper.net 返回 mysql LAST_INSERT_ID() 时强制转换无效
此问题已在此处针对 MSSQL 进行了介绍:
但此解决方案不适用于 mysql。
要LAST_INSERT_ID()
使用 mysql 将整数转换为整数,您必须这样做:
SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);
堆栈跟踪是:
有没有人在 MySQL 中解决了这个问题?
编辑:
我已经设法通过以下方式完成这项工作:
也许不理想,但它有效。
c# - 如何创建具有动态确定属性名称的匿名对象?
给定一个值数组,我想创建一个具有基于这些值的属性的匿名对象。属性名称只是数组中值的索引在"pN"
哪里。N
例如,给定
object[] values = { 123, "foo" };
我想创建匿名对象
new { p0 = 123, p1 = "foo" };
我能想到的唯一方法是使用 a switch
orif
链接到合理数量的参数来支持,但我想知道是否有更优雅的方法来做到这一点:
背景
我有一组现有的方法可以对数据库执行 sql 语句。这些方法通常采用string
sql 语句和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
属性显示没有为命令配置的参数。
architecture - 存储库模式 Where 和轻量级 ORM
对于我的 IRepository,我想:
- 让它可以被 dapper、petapoco、mass 等微型生物使用……用于 SPEED
- 要在服务器上运行 where 子句,希望使用 Expression/IQueryable 样式(这也是非常可交换的)
有可能两者兼得吗?您将如何为微组织编写 IRepository Where?微型 ORM 是否适用于大到需要存储库的项目?
我需要速度和交换能力。如果没有一个好的地方,我的存储库模式就毫无价值,对吧?
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。
我真的很喜欢小巧玲珑,但这个问题让我头晕目眩 - 所以感谢您的帮助!
sql - 如何调用 L2S 提供者以 Func 的形式翻译谓词到 SQL where 子句?
我在我的应用程序中使用 L2S,但我越来越多地切换到dapper.net,因为我在查询性能和烦人的n+1 选择问题上遇到了重大问题。
它工作正常,但我想念过滤数据时舒适的 LINQish 编写谓词的风格。
所以我的问题是,我如何将形式的谓词转换Func<T, bool>
为 SQL Server where 子句以将其与 dapper 一起使用?
我认为以前一定有人这样做过,还是所有精巧的用户都手动编写了他们的 sql 语句?
正如标题所暗示的,也许可以选择为 SQL Server 调用 LINQ2SQL 提供程序?
基本上我正在寻找类似动态linq的逆的东西。
.net - Dapper:多次执行一个命令和 linq 和 ToArray
根据dapper docs可以写
我尝试使用
但是在 Dapper 代码中出现异常 “DynamicMethod 的类型所有者无效”
我是在尝试编写太聪明的代码还是误解了其他内容?偶然发现了一个错误?
我在 Win7 上运行 Dotnet3.5。
c# - 在 Dapper.NET 中调整 CommandTimeout?
我正在尝试通过 Dapper 的存储过程运行 SQL 备份(我的应用程序的其余部分使用 Dapper,所以我更愿意让这部分也通过它运行)。在 CommandTimeout 启动之前它工作得很好。
我知道的唯一 CommandTimeout 设置是在 SqlCommand 中。有没有办法通过 Dapper 进行设置?