问题标签 [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 回答
2220 浏览

mvc-mini-profiler - 使用 MVCMiniProfiler 的 Dapper

我想将 MVCMiniProfiler 与 Dapper 一起使用。除了在“Using Profiler.Step”块中包装来自 dapper 的“Query”调用之外,这是否可能?

我有这个基本的 Dapper 调用:

MiniProfiler 示例显示了这一点

我被困的地方是在 ProfiledDbConnection 上执行“Get”。使用 Dapper 时是否可以使用 ProfiledDbConnection?

0 投票
1 回答
309 浏览

c# - Dapper 的性能结果在我的机器上看起来非常相似

我运行了 dapper 源代码附带的性能测试:http ://code.google.com/p/dapper-dot-net/

在大多数情况下,各种数据访问方法之间的性能非常相似,我的结果在 1200ms 到 1500ms 范围内。

不确定结果是在哪种服务器上完成的,但他们的网页显示的结果在 50 毫秒范围内。

我在具有 12gb 内存的 i7 桌面上运行它,我应该做些什么吗?它似乎正在针对 sql server 的 tempdb 运行所有内容。

0 投票
4 回答
21472 浏览

c# - 将 Dapper 与返回游标的 Oracle 存储过程一起使用

如何将Dapper与返回游标的 Oracle 存储过程一起使用?

在这里,DbType 是 System.Data.DbType,它没有 Cursor 成员。我尝试过使用 DbType.Object,但这不适用于 OracleClient 和 OracleDataAcess。

什么是使用 OracleType 或 OracleDbType 的可能方法?

0 投票
1 回答
3843 浏览

mysql - 尝试设置从 MySQL 返回的布尔值时,Dapper 抛出了无效的强制转换异常

我有这门课

我正在使用 dapper 用这个 sql 填充它:

当我运行这个我得到这个错误:

解析第 2 列时出错 (IsValidated=1 - Int64)

我已经浏览了简洁的代码并且 sqldatareader 说该列是int64.NET Mysql 连接器似乎认为 'TRUE'(在 MYSQL 中应该是 tinyint)是一个int64.

我确实发现了这个错误报告,它说对于所有版本的 INT(INT、BIGINT、TINYINT、SMALLINT、MEDIUMINT),.NET 连接器都返回 int64。然而,这是 MySQL 5.0 中的一个错误,并且已修复,我使用的是 5.5。我有 mysql.data 版本 6.4.3.0

我已经“解决”了这个问题,方法是将它全部选择到一个临时表中,IsValidated列声明为BOOL,但这是一个糟糕的解决方案。

0 投票
1 回答
2647 浏览

c# - 嵌套多映射 Dapper 分页查询中的重复字段名称问题

在尝试使用 Dapper 进行多映射时,我遇到了一个问题,用于分页查询。

因为我在这个分页场景中使用嵌套查询,所以嵌套查询中有多个表,我必须加入这些表才能获取我的多映射数据,但其中一些表将共享一些同名字段,您可以在我在下面的示例查询(例如iddisplaynameemail):

在上面的示例中,您可以看到在嵌套查询中,字段id(出现在posts表中、users表连接和topics表连接中)以及displaynameemail(出现在两个users表连接中)都会出现问题。

到目前为止,我想到的唯一解决方法是将每个“问题”字段转换为不同的名称,但这涉及在受影响的模型中创建虚拟属性的非常混乱的过程,因此多重映射可以映射到这些,并编辑如果尚未设置实际值,我的模型中的“真实”属性也会检查虚拟属性的值。

此外,在上述场景中,我必须创建 x 虚拟属性,其中 x 是我在查询中的同一个表上可能拥有的连接数(在本例中,同一个用户表上有 2 个连接,因此需要 2 个唯一命名的虚拟属性仅用于 Dapper 映射目的)。

这显然不是理想的,当我创建更多这些多映射分页查询时,我肯定会遇到问题和更多的不整洁。

我希望有一个好的,干净的解决方案来解决这个问题?

0 投票
3 回答
13623 浏览

c# - 是否可以在 C# 中使用变量/动态字段集声明匿名类型?

在 C# 中,我想弄清楚是否可以声明一个匿名类型,其中字段直到运行时才知道。

例如,如果我有一个键/值对列表,我可以根据该列表的内容声明一个匿名类型吗?我正在处理的具体情况是将参数传递给 Dapper,我不知道我将有多少参数。

我想将此 List(或等效的 Map)转换为可以作为查询参数传递给 Dapper 的匿名类型。所以理想情况下,如果定义为匿名类型,上面的列表最终会看起来像这样:

我在 StackOverflow 上看到了几个关于在声明匿名类型后扩展匿名类型(“extendo objects”)的问题,或者在创建对象后在对象上声明任意字段,但我不需要这样做......我只需要预先动态声明类型一次。我的怀疑是,如果可能的话,这将需要一些花哨的反思。

我的理解是编译器在编译时为匿名类定义了一个类型,所以如果该类的字段直到运行时才可用,我可能会不走运。实际上,我的用例实际上可能与使用“扩展对象”来定义任意字段没有什么不同。

或者,如果有人知道将查询参数传递给 Dapper 的更好方法(而不是声明一个匿名类),我也很想听听。

谢谢!

更新

很抱歉延迟回到这个!这些答案都很棒,希望能给大家加分。我最终使用了 jbtule 的解决方案(由 Sam Saffron 编辑),将 IDynamicParameters 传递给 Dapper,所以我觉得我必须给他答案。其他答案也很好,回答了我提出的具体问题。我真的很感谢大家在这方面的时间!

0 投票
2 回答
3366 浏览

c# - Dapper micro ORM,数据库无关和 MySql Guid 类型

我正在一个宠物项目上试验Dapper 。我正在使用SQLite运行所有测试,并使用 MySql 进行“生产”。但是我不确定如何最好地使用 Dapper 来处理与数据库无关的情况。

我遇到的特殊问题是 MySql不支持主键的 Guid 类型,因此我使用varchar(40)作为类型(SQLite 支持作为 guid 的唯一标识符)。所以问题来了,如果我有一个如下的通用存储库,我在尝试从 MySql 数据库中选择时会遇到麻烦。因为 Id 属性的类型是 Guid,Dapper 会抛出“ Error parsing column 10 ”,因为 varchar 类型与 guid 类型不匹配。

如果我将 Id 属性从 guid 更改为 int,那么 GetById 中的原始 sql 将更加棘手,我什至不知道如何编写。它将类似于,1. 开始事务,2. 插入,3. 选择最后插入的 id 并返回它。如果数据库类型是 mysql,那么我将使用last_insert_id,或者如果它是 sqlite 则使用last_insert_rowid?因为原始 sql 语法会因数据库而异...

其他示例是限制返回的行数(尤其是分页)等等。那么我将如何使用 dapper 编写与数据库无关的原始 sql 查询呢?也许在我的情况下,Dapper 不适合?也许我应该在这里使用相同的旧 NHibernate。有什么建议么?我做错了吗?谢谢!

0 投票
7 回答
99753 浏览

c# - 在 Dapper 中正确使用多重映射

我正在尝试使用 Dapper 的多重映射功能来返回 ProductItems 和关联客户的列表。

我的简洁代码:

这工作正常,但我似乎必须将完整的列列表添加到“splitOn”参数以返回所有客户的属性。如果我不添加“CustomerName”,它将返回 null。我是否误解了多映射功能的核心功能?我不想每次都添加完整的列名列表。

0 投票
8 回答
116794 浏览

orm - 如何使用 Dapper 映射嵌套对象列表

我目前正在使用实体框架来访问我的数据库,但想看看 Dapper。我有这样的课程:

因此,可以在多个地点教授一门课程。Entity Framework 为我进行映射,因此我的 Course 对象填充了位置列表。我将如何使用 Dapper 来解决这个问题,甚至有可能还是我必须在几个查询步骤中完成它?

0 投票
1 回答
6561 浏览

sql - 使用 Dapper 的 SQL 语句中的参数化 LIKE 子句

我想使用 Dapper 执行以下查询,该查询当前不返回预期结果(我认为它必须将 @pName 参数视​​为单引号内的文字文本?):

@pName 是我在执行查询时为其赋值的参数。

如果我只是像这样构建 SQL,一切都会奏效:

..但如果可能的话,我宁愿使用参数。

我正在使用以下代码执行查询:

我如何使用 Dapper 解决这个问题?