问题标签 [dapper-extensions]

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 回答
473 浏览

c# - Dapper SetTypeMap 打破了 DapperExtension 的 ClassMapper

在我的项目中,我使用自定义 SqlMapper 在 dapper 中映射我的 Db 列,但是当我设置 Dapper 以通过执行以下操作来使用我的自定义类型映射器时:

Dapper.SqlMapper.SetTypeMap(typeof(User), new UserMapper());

DapperExtension 不再能够映射我的 User 类,因此当我这样做时:

User item = cn.Get<User>(id);

该项目仅包含默认值。

我的 UserMapper 不会干扰 DapperExtensions 的 ClassMapper 实现,它只实现 SqlMapper.ITypeMap

你认为它会以任何方式覆盖 DapperExtensions 功能吗?谢谢您的帮助

0 投票
1 回答
1042 浏览

c# - 如何使用 Dapper Extensions 映射从 POCO 获取表名?

我的数据库中有一个带有名称的表MyTableMyTablePoco为该表创建了一个 POCO 类。

以下是 Dapper Extensions 的映射代码:

以下是我需要来自 POCO 类的表名的代码:

我命名 POCO 类的约定是TableName + "Poco". 根据这个约定,我从类名中替换“Poco”的技巧效果很好,如上例所示。

但是,我想从映射配置中获取表名。我认为这会更可靠,因为它避免了任何字符串处理和关于命名 POCO 的假设。

如何使用 Dapper Extensions 映射从 POCO 类中获取表名?

0 投票
2 回答
2761 浏览

c# - 如何使用 Dapper Extensions Predicate 实现“IN”子句?

我想使用 Dapper Extensions Predicate 替换此查询?

commaSeparatedListOfIDs是一个IEnumerable。_Integer

到目前为止我已经尝试过:

我需要一个 operator Operator.In,但它在 Dapper Extensions 中不存在。

我应该如何使用 Dapper Extensions Predicate 系统实现“IN”子句?

0 投票
1 回答
1999 浏览

c# - 仅在使用 Dapper 更新时忽略属性?

设置

作为我的数据访问层的一部分,我将 Dapper 与 DapperExtensions 一起使用,并用模型表示我的数据库实体。其中一些模型包含用于记录或更改跟踪的字段,如下所示:

在此示例中,BaseModel 是一个抽象类,它指定模型具有一些整数 Id(以便更容易使用泛型);ITypeWithChangeTracking 指定它应该具有更改跟踪字段。到目前为止,我已经能够将大部分 DAL 逻辑改组为可以在所有模型之间共享的通用实现,并且我希望与那些实现更改跟踪的模型保持同步。

使用的工具

C#

小巧玲珑

DapperExtensions

问题

某些更改跟踪字段应在插入对象时设置,而不是在更新对象时设置。我无法以可用于每个模型的通用方式实现这一点。

问题

有什么我可以与 Dapper 或 DapperExtensions 一起使用来指定一个字段应该包含在插入中,但忽略更新?

我已经查看了各种属性,例如用于映射的 ReadOnly 和 Ignore,但到目前为止,我发现的所有内容都是“始终包含”或“始终忽略”的笼统。最好,我希望它可以与标准的 Update() 函数一起使用,并且不需要专门的存储过程,尽管我不确定这是否可能。我缺少任何漏洞或有用的装饰器吗?

(注意:如果有办法将这个规范一直打乱到 ITypeWithChangeTracking 接口,那么主要的布朗尼点!)


编辑:

我没有创建单独的模型,而是调整了已经从 ITypeWithChangeTracking 设置更改跟踪值的代码,以便它能够识别未设置的值(null、DateTime.Min 等)。它已经在检查记录是新的还是以前存在的,所以如果 1) 记录确实存在并且 2) 模型具有未设置的更改跟踪值,我让它从现有记录中获取相关值。

0 投票
2 回答
402 浏览

c# - 带有 DapperExtensions 的 TransactionScope?

我想将涉及 DapperExtensions 函数的多个方法调用分组到一个事务下,这样如果有任何一个失败,我可以将它们全部回滚。

这涉及对预先存在的函数的调用,其中一些

  • 使用 DapperExtensions 谓词,和/或
  • 使用他们自己的连接。

答案需要允许单个事务下的谓词调用和多个连接。

我试过的

到目前为止,我已经找到了两种方法,TransactionScope 和 IDbConnection。

交易范围

尽管据我所知,这在 .Net Core 2.0 中应该可用,但我正在使用的 Dapper 和/或 DapperExtensions 调用似乎不支持它。运行它会给我以下错误:

我浏览了有关这是否可行或将永远可行的文档,但结果是空的。

IDbTransaction

DapperExtensions 的谓词函数似乎支持这一点,但到目前为止,我找不到任何跨多个连接使用同一事务的示例。一些较早的帖子特别指出这是一种“基于连接”的事务方法,所以我不确定它是否可能。

我发现关于 DapperExtensions 的文档非常精简,所以如果有人能指出一些关于它的函数如何处理一般事务的参考资料,那也将非常有帮助!

0 投票
1 回答
942 浏览

c# - 使用 Dapper 填充类对象

所以我有这些课程。现在我想使用 Dapper 填充 Expense 类对象。但我总是将 Category 和 PaymentModes 设为 null。这是我从 DB 得到的结果:

在此处输入图像描述

以下是获取费用数据的方法:

在此处输入图像描述

如您所见,该特定 ExpenseID 的 Category 和 PaymentModes 始终为空。如何使用 Dapper 填充这些对象的属性?谢谢你。

0 投票
1 回答
4474 浏览

c# - c# Dapper,SplitOn:多个相同参数问题多映射一对多

我有一个问题是 Dapper Query 在父对象而不是子对象上拆分。结果为每个孩子返回一个父行,给出许多重复的父母,其中只有 1 个孩子。

我正在探索的一个可能的问题是 table1 和 table2 的主键是否会在拆分函数中引起一些混乱,因为它们具有相同的名称 (.Id)。

问题是,我如何拆分父子行,以便它可以使用 SplitOn 中的相同参数将许多子模型绑定到一个父模型:?

==================================================== ========================

结论

在评论中,我们得出结论,字典需要在函数之外,不需要多个 SplitOn:,一个就足够了。

最后,字典确实提供了一个独特的 Table1 集合,每个集合都有代表孩子。

有关更多详细信息,请参阅评论。

==================================================== =========================

0 投票
1 回答
1086 浏览

dapper - 使用单个查询(或在事务中)删除多个对象

我将 Dapper 与 Dapper-Extensions 一起使用。我目前正在一个一个地删除所有对象:

这不仅对性能不利,而且因为如果删除失败,我想回滚整个操作。有没有办法执行“大规模”删除,例如传递对象列表而不是data

0 投票
1 回答
1145 浏览

dapper - MySQL + Dapper 扩展:SQL 语法错误

我正在尝试使用 Dapper Extensions 进行 CRUD 操作。但是在将数据插入 MySQL 数据库时出现错误,如下所示:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 [....] 行 [....] 附近使用正确的语法

如果我使用 MSSQL 数据库,则 Dapper Extensions 工作正常。为什么我在使用 MySQL 时收到此错误?

0 投票
1 回答
185 浏览

dapper - 从 EF 上下文批量插入时,有没有办法包含单个子表?

我们有一个巨大的 EF 上下文模型。我只想从一个父表及其子表批量插入数据。BulkSaveChanges 花费的时间太长,我正在玩 BulkInsert 但是当我设置时options.IncludeGraph = true它需要更长的时间。有没有办法阻止 Dapper 搜索所有相关对象而只插入来自 Parent 表和 Child 的数据?