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

c# - 与 SQL Server 一起使用时如何定期刷新 dapper.net 缓存

有人可以解释一下这是什么意思(来自 Dapper.net 网站)

限制和警告

Dapper 缓存有关它运行的每个查询的信息,这允许它快速实现对象并快速处理参数。当前实现将此信息缓存在 ConcurrentDictionary 对象中。它存储的对象永远不会被刷新。如果您在不使用参数的情况下即时生成 SQL 字符串,您可能会遇到内存问题。我们可以将字典转换为 LRU 缓存。

我无法理解粗体线的含义。我正在使用 SQL Server 和 c# 客户端。

有人可以提供一个会产生此内存问题的 c# 代码示例。谢谢你

0 投票
1 回答
3749 浏览

select - 如何使用 dapper 选择一对多关系和一对一关系

我有以下类和数据库模式。我正在尝试使用 dapper 从数据库中查询这些数据,这将水合完整的对象图。我查看了各种 SO 问题和测试,但无法真正弄清楚如何做到这一点。

数据库架构

课程

0 投票
2 回答
3563 浏览

.net - 嵌套多重映射的 Dapper 语法

这是我的存储过程,它从数据库中填充数据。

我试图在简洁的查询下面写,但得到一个异常

我尝试使用以下概念,但它只返回单个对象。我需要一份人员名单。

提前致谢。

0 投票
1 回答
24315 浏览

transactionscope - 小巧玲珑和交易范围?

我刚开始玩 Dapper。到目前为止我喜欢它。dapper 不能用TransactionScope吗?我注意到即使我从不打电话TransactionScope.Complete,我的更改仍然会提交给数据库。如果现在不支持 TransactionScope,那么将来是否有计划支持它?如果没有那么你必须使用传统的事务管理(System.Transactions.Transaction)吗?

更新:我刚刚在 Twitter 上与 Sam 交谈过。它应该工作。明天早上(在工作中)我会更新它的细节,看看是否有人能弄清楚为什么我的更改仍然提交到数据库,即使我从未调用过完成。

0 投票
1 回答
6968 浏览

datareader - Dapper 处理返回空结果集

我们正在使用 Dapper 来映射我们的 sql 数据,到目前为止它运行良好。我有一个案例,但我们正在做类似的事情:

只要我调用的存储过程返回数据,这就会很好。有时存储过程可能不会返回结果并在 out 参数中返回错误。这似乎会导致 Dapper 出现问题,因为 dapper 会抛出错误:

“使用多映射 API 时,如果您的密钥不是 Id,请确保设置 splitOn 参数”

有没有办法编写查询,以便它可以正确处理返回空结果时的情况,或者这是 Dapper 的限制?

0 投票
1 回答
617 浏览

sql-server - 通过大量一对多映射提高查询性能

我在 SQL Azure 中使用实体框架,在我的应用程序的一页中,我们向用户展示了相当多的相关数据。我们在页面上最多加载 30 个项目,但每个项目都有 5 个与其他对象的一对多映射。查询时间处于合理水平,但我在对象映射上泄露了相当多的性能。(几乎整整一秒)。

这是我的对象的示例

任务具有名称、状态和截止日期。它还有许多自定义名称/值对的任务数据、许多显示任务历史的事务、许多文件、许多评论和许多工作人员。

我的 EF 查询看起来像这样。

特定任务的相关性首先基于状态,然后基于截止日期。所以我创建了一个 IComparable 覆盖以用于排序。关键是分页查询在这种情况下不能很好地工作,因为排序不是基于 int 或日期(对吗?)

在我们应用程序的其余部分中,我们显示的关于每个任务的信息较少,并且 Linq2Entities 工作得很好。在这种情况下,对象映射正在杀死我们。我已经走上了使用 Dapper 直接进入数据库的道路,但一对多映射有它的警告。对于一些关系,我认为它会运作良好,但不适用于 5-6。我接下来要看的是 PetaPoco,但没走多远,我就想我最好先把这个问题放在这里。

我是否因为试图带回这么多数据而疯狂?我有哪些选择可以从中获得最大性能?因为它只是应用程序的一个领域,所以我会稍微复杂一点。

0 投票
2 回答
10696 浏览

asp.net - Dapper.net 交易问题

我正在尝试向我的 Sql Server 2008 数据库提交一个事务 - 首先是 2 个插入,然后是几个更新,但是,一旦它尝试执行第一个更新,我就会收到以下错误:

当分配给命令的连接处于挂起的本地事务中时,ExecuteNonQuery 要求该命令具有事务。该命令的 Transaction 属性尚未初始化。

这是代码,为简洁起见稍作编辑:

前 2 个插入工作正常,但一旦它尝试执行其中一个更新,就没有乐趣了。

0 投票
2 回答
573 浏览

c# - 推荐的asp.net MVC模型设计方法

当涉及到我的模型设计(并且我正在使用 Dapper.net)时,我正在尝试为即将开始的新项目确定最佳方法。

我喜欢让我的模型带有对象而不是外键属性的想法,即

对比

但是,如果我实现这种很好的干净方法,我必须对所有对象进行多重映射(这会导致对象内对象的潜在循环引用,或者必须在某个点停止多重映射,因此最终得到NULL 对象在对象树下的某个点)。此外,如果我在一定程度上进行多映射,那么我可能会导致不必要的工作,在并不总是需要它们时执行连接等。

或者,如果我决定使用多重映射“根据需要”在对象中填充我的对象(在我的一些 repos 方法中执行多重映射,因为它需要,而在其他 repos 方法中,不要费心填充对象),然后感觉有点脏,因为我不能总是确定一个对象(在一个对象内)是否为空。

我过去使用过 NHibernate(或者至少是它的一些更基本的功能)并且没有遇到两难境地,因为我的模型中总是有对象,如果/当需要它们时,我可以依靠延迟加载来获取它们- 但是,没有使用 Dapper.net 进行延迟加载,我真的不确定最好的方法是什么?

0 投票
7 回答
6358 浏览

c# - Dapper 是否支持 SQL 2008 表值参数 2?

我知道 dapper 可以支持 TVF,但是您如何发送额外的参数以及 TVF(不将其添加到 IntDynamicParam 类)?请参阅 Tests.cs 中的以下示例,我已修改以添加额外参数:

我尝试了以下但得到错误(不存在从对象类型 SqlMapper.Tests+IntDynamicParam 到已知托管提供程序本机类型的映射。):


谢谢山姆的回复,但问题有点不同。我想知道如何将另一个变量与元组一起传递。请参阅下面的修改后的 SP:

0 投票
1 回答
1974 浏览

ms-access - Dapper And System.Data.OleDb DbType.Date throwing 'OleDbException : Data type mismatch in criteria expression'

Not sure if I should raise an issue regarding this, so thought I would ask if anybody knew a simple workaround for this first. I am getting an error when I try to use Dapper with OleDbConnection when used in combination with MS Access 2003 (Jet.4.0) (not my choice of database!)

When running the test code below I get an exception 'OleDbException : Data type mismatch in criteria expression'

I believe from experience in the past with OleDb dates, is that when setting the DbType to Date, it then changes internally the value for OleDbType property to OleDbTimeStamp instead of OleDbType.Date. I understand this is not because of Dapper, but what 'could' be considered a strange way of linking internally in the OleDbParameter class

When dealing with this either using other ORMs, raw ADO or my own factory objects, I would clean up the command object just prior to running the command and change the OleDbType to Date.

This is not possible with Dapper as far as I can see as the command object appears to be internal. Unfortunately I have not had time to learn the dynamic generation stuff, so I could be missing something simple or I might suggest a fix and contribute rather than simply raise an issue.

Any thoughts?

Lee