问题标签 [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 投票
1 回答
1368 浏览

parameter-passing - Dapper:我可以为任何事情使用参数吗?

我正在编写一些代码来为我的应用程序准备我的数据库。代码中有一些重复的 SQL 语句,当我创建表时,我想将它们隐藏在某些方法中(目前只有两个:创建主键和使表的 id 成为自动递增的postgres)。对于主键的简单情况,我先写了一个这样的函数:

经过大量的错误和异常摆弄,我终于得出结论,这种方式使用参数并不真正支持,所以我切换到传统的string.Format()调用,一切都很好。

但我不是很满意。这种使用参数的方式真的不支持吗?如果是这样,我可以在哪些地方安全地使用这些参数?只针对 SQL 查询的可变部分——比如我可以使用存储过程参数的地方?

0 投票
1 回答
3997 浏览

c# - 工作单元模式 - 管理父子关系

我正在使用 micro-orm (dapper) 并试图为我的存储库提供一个工作单元 (UoW) 实现。我有点难过如何最好地处理我的 UoW 中的父子(外键)关系。例如,如果我有以下两个直接映射到数据库表的实体:

用户通过外键 User.ClientDatabaseId 与 ClientDatabase 有父子关系。User 和 ClientDatabase 上的 Id 属性都是 Identity 列。我的UoW接口定义如下:

在某个时候,在同一个 IUnitOfWork 中,我想为 ClientDatabase 和 User 调用 MarkNew(),然后调用 Commit()。现在我想要发生的事情是首先保存 ClientDatabase(子实体),然后将在 ClientDatabase 上设置的 Id 由于它的数据库插入而设置为 User 之前的 ClientDatabaseId 外键属性然后也插入到数据库中。我只是想知道是否有人以一种很好的通用方式解决了这类问题?

0 投票
3 回答
77582 浏览

sql-server - Dapper.NET 和具有多个结果集的存储过程

有没有办法将 Dapper.NET 与返回多个结果集的存储过程一起使用?

就我而言,第一个结果集是单行单列;如果是,0则调用成功,第二个结果集将包含实际的数据行/列。(如果它不为零,则会发生错误并且不会提供第二个结果集)

有没有机会用 Dapper.NET 处理这个问题?到目前为止,我只能找回那张单曲0——但仅此而已。

更新:好的,它工作正常 - 只要结果集没有。2 是一个单一的实体:

现在,我还有另一个要求。

对于第二个结果集,Dapper 的多重映射(将从 SQL Server 返回的单行拆分为两个单独的实体)似乎尚不支持(至少似乎没有.Read<T>可以处理的重载多映射)。

如何将该行拆分为两个实体?

0 投票
9 回答
56901 浏览

dapper - 多映射器创建对象层次结构

我一直在玩这个,因为它看起来很像记录的帖子/用户示例,但它略有不同并且不适合我。

假设以下简化设置(一个联系人有多个电话号码):

我很想得到一个返回带有多个电话对象的联系人的东西。这样,如果我有 2 个联系人,每个联系人有 2 部电话,我的 SQL 将返回这些联系人的连接作为结果集,总共 4 行。然后 Dapper 会弹出 2 个联系人对象,每个对象有两部手机。

这是存储过程中的SQL:

我尝试了这个,但最终得到了 4 个元组(这没关系,但不是我希望的......这只是意味着我仍然必须重新规范化结果):

当我尝试另一种方法(如下)时,出现“无法将'System.Int32'类型的对象转换为'System.Collections.Generic.IEnumerable`1 [Phone]'”的异常。

我只是做错了什么吗?它看起来就像帖子/所有者的例子,除了我是从父母到孩子而不是孩子到父母。

提前致谢

0 投票
1 回答
3505 浏览

c# - Dapper 示例代码的说明

我正在尝试了解 Dapper 并且似乎缺少一些非常基本的东西,有人可以解释从 Google 代码上的 Dapper 主页获取的以下代码,并解释为什么没有 From 子句,以及 Query 方法的第二个参数(动态) 传递了一个匿名类型,我认为这是在以某种方式设置一个命令对象,但想用普通的术语来解释一下。

谢谢你,斯蒂芬

0 投票
2 回答
6855 浏览

c# - AnsiStrings 可以默认与 Dapper 一起使用吗?

我正在对字符串主要存储在VarChar列中的数据库使用 Dapper。默认情况下,DapperNVarChar在生成查询时使用参数,虽然我可以包装我使用的每个字符串参数,但默认情况下使用 AnsiStrings 并用于这种情况DbString会很棒。DbStringNVarChar

我尝试将 Dapper 源中的类型映射从 更改为DbType.StringDbType.AnsiString但这似乎会导致参数委托的 IL 生成错误(抛出一个InvalidProgramException)。

有没有更简单的方法来做到这一点?

更新

仅仅改变 typeMap 是不够的,我还需要改变一些if (dbType == DbType.String)检查。现在它起作用了!

0 投票
1 回答
31223 浏览

c# - 插入一个 IEnumerable带有 Dapper 错误的集合,带有“Dapper 不支持类”。

是的,这里这里都有关于如何使用 dapper-dot-net 插入记录的问题。然而,这些答案虽然内容丰富,但似乎并没有为我指明正确的方向。情况如下:将数据从 SqlServer 移动到 MySql。将记录读入一个IEnumerable<WTUser>很容易,但我只是在插入时没有得到任何东西。首先,“移动记录代码”:

cnn.Query 和 cnn.Execute 调用 dapper 扩展方法。现在,WTUser 类(注意:列名从 SqlServer 中的“WindowsName”更改为 MySql 中的“ResourceName”,因此两个属性指向同一个字段):

我收到来自 dapper 的异常:“Dapper 不支持 WTUser。” DataMapper(dapper)中的这个方法:

此时 OwnerType =

System.Collections.Generic.List`1[[CRMBackEnd.WTUser,CRMBE,版本=1.0.0.0,文化=中性,PublicKeyToken=null]],mscorlib,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089

似乎 OwnerType 应该是CRMBackEnd.WTUser……不是List<CRMBackEnd.WTUser>……???因为正在发生的事情是正在迭代集合属性:计数、容量等。 我错过了什么?

更新

如果我将 session.WriteData 修改为:

记录被很好地插入......但我认为这不是必要的,例如:

... 来自dapper-dot-net

0 投票
3 回答
157 浏览

c# - 如何将其重写为更 LINQy?

我这里有这组数据。事件有一个EventGroups类型的属性List<Groups>

我觉得最后一个块可以比现在更干净地重写。我该怎么做才能使这个更清洁?

0 投票
1 回答
476 浏览

c# - 使用 Dapper 在 MySQL Master/Slave 上进行读/写分布

使用两个 IDbConnection 对象在 MySQL 主/从之间分配写入和读取时,dapper 会有什么问题吗?

0 投票
2 回答
3363 浏览

c# - 使用 LINQ 自动生成类型的 Dapper 参数化查询

我在工作中使用了 LINQ 和 Dapper 的组合。出于性能原因,我在某些地方用 Dapper 替换了我的 LINQ 代码。我有很多通过从 SQL Server 拖放到 Visual Studio 数据库图中创建的 LINQ 数据对象。

在下面的例子中,我已经在内存中有一个 LINQ 对象,我想将它作为查询的参数传递给 Dapper。例如:

crawledAnimal 包含一个公共属性 AnimalId 和 AnimalType 以及 getter 和 setter。

但是在执行此代码时,我收到以下错误:

dapper 不支持类型:SMDApp.Models.Animal

以下代码确实有效:

对我来说,使用现有对象会更方便,特别是在我使用对象的多个属性作为查询参数的情况下。谁能告诉我为什么这适用于匿名对象而不适用于自动生成的 LINQ 对象?

针对 Ben Robinson 的回复进行了编辑。

针对 Marc Gravell 的回复进行了第二次编辑。