问题标签 [dapper-contrib]

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

c# - 通过 dapper [contrib] 在具有默认值的可空布尔值上检索空值时出现问题

这可能是一个边缘情况,也许我对默认值在这种情况下如何工作的理解是错误的。

我有一个问题,即使它在数据库中为,以下属性始终返回为true。我猜这是由于默认值,但默认值不应该覆盖数据库中的内容 - 或者我认为。

部分模型..

Dapper.Contrib 调用的一部分..

我已经验证了有问题的数据库记录是null,但是“结果”将它返回为true。这是我的问题,dapper 还是它如何与可空类型的默认值一起工作?

0 投票
1 回答
1982 浏览

dapper - Dapper.Contrib:如何通过过滤除 ID 以外的列来获取一行?

我的课如下:

使用 Dapper.Contrib,有没有办法通过而不是 Id来获取User记录?Title

如果我像下面这样查询,它可以工作。但是,我想过滤Title不是键的列。

0 投票
2 回答
201 浏览

c# - 使用 Linq Dapper 访问 foreach 中的单个字段

我正在使用 dapper,我想使用 Linq 来更新我正在尝试使用的一个表中名为 status 的单个字段。

我的班级如下:

但如果我使用像上面这样的 foreach,它就不起作用。我确信它应该正确更新项目,但我认为因为我正在查看我的 foreach 中的单个项目和更新中的列表,所以它没有正确更新。

我要做的就是将项目标记为已完成并准备好转移,我是通过状态列和一个 int 枚举来完成的。

也许我错过了我的主键是什么的声明?

编辑 2

当我使用主键的键声明时,我得到以下信息:

未处理的异常:System.AggregateException:发生一个或多个错误。(约束

编辑 3

我已经设置了我班级的密钥,但正如你所见,我的数据库上有自动增量,但它仍然崩溃。插入应该如何处理?

在此处输入图像描述

编辑 4

例如,我按如下方式插入数据库。这不应该工作吗?

我已经为可以正常工作的更新放置了标签键,但是当我尝试使用该键进行插入时,它并没有说约束错误,但更新有效。有人不知道我如何解决 Dapper contrib 中的插入和更新问题。

0 投票
1 回答
615 浏览

c# - Dapper contrib 获取具有 varchar 主键的数据

我有一个 varchar 键列。我正在尝试使用GetDapper contrib 的方法。我得到一个例外:

Get 仅支持具有 [Key] 或 [ExplicitKey] 属性的实体。

我的实体:

我的精巧方法

我什至尝试设置显式密钥,但仍然出现相同的错误。我究竟做错了什么?

0 投票
1 回答
2150 浏览

c# - [Computed] 和 [Write(false)] 属性有什么区别?

资源解释了如何Computed排除属性(仅在更新中?)。

指定属性应从更新中排除。

Write(false)实现同样的目的吗?[Computed]和有什么区别[Write(false)]

编辑:

我刚刚检查了针对我的问题链接的资源。它几乎击中了这一点!有人可以确认两个属性是否执行相同的操作,但只是以两种不同的方式措辞,以便为用户提供更好的抽象吗?

0 投票
2 回答
466 浏览

c# - 将 DateTime 更新到数据库会引发 SqlTypeException - SqlDateTime 溢出

执行以下代码行:

抛出异常:

SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间(Contrib 中的第 465 行var updated = connection.Execute(sb.ToString(), entityToUpdate, commandTimeout: commandTimeout, transaction: transaction);

我正在测试 Dapper.Contrib。
我在 SQL Server 中有一个表,它有几DateTime列 - 其中一些允许 NULL 值。
我创建了一个具有属性的对象以匹配表中的列。对于DateTime列,属性可以为空。

以下是其中一个属性的示例:

我首先使用IDbConnection.Query方法从 SQL 表中获取记录。这运行正常并且对象映射很好。当我检查DateTime它显示的可空值时null

然后,我对字符串参数进行简单更改并调用以下命令:

我该如何解决这个问题?

0 投票
1 回答
2344 浏览

c# - Dapper 忽略属性运行时

有没有办法在运行时忽略属性映射。因为我不知道数据库是否有特定的列,我必须在插入之前检查它。如果数据库没有列,那么我想忽略这一特定属性。

更新:

这是我的插入代码

0 投票
2 回答
421 浏览

linq - 如何将 Dapper LINQ 与 TableDirect(无嵌入式 SQL)与 ORACLE 一起使用?

我尝试了 DapperExtensions、Dapper.Extensions.Linq 和 linq2dapper 无济于事。我会尝试Dapper.SimpleCRUD-with-Oracle。我可能会改用存储过程来解决。我想不使用TableDirect嵌入式 SQL 语句。如何将 Dapper 和 Linq 与 a 一起使用TableDirect?或者,如何在TableDirect没有嵌入式 SQL 的情况下使用并过滤表?

以下是我的问题:

  • 如果没有运行时错误,我无法创建 Predicate。
  • 我需要缺少配置
  • 我收到有关表的 ORA 错误说“列不正确,运行时错误”。

如何将 Dapper LINQ 与 TableDirect(无嵌入式 SQL)与 ORACLE 一起使用?

0 投票
2 回答
1359 浏览

c# - 如何使用 Dapper.Contrib 正确“单一化”表名?

我有一个 .Net Core 3.1 控制台应用程序。

在 SQL Server 数据库中,我有单名的表,和我的 POCO 类一样,便于匹配和维护。

对于插入、更新和删除操作,我想使用Dapper.Contrib库。但是当我在生成的 SQL 查询中运行插入函数 Dapper 时,表名复数形式。

SQL表“学生”:

C# 代码

在输出我得到一个例外:

对象名称“学生”无效。

我四处寻找解决方案,但找不到有效的示例。一般有两种建议:

  1. 使用数据注释。这个不适合我,因为有很多 POCO 对象是使用Scaffold-DbContext. 在开发过程中,我对数据库进行了更改,然后再次重新创建了 POCO。此操作会删除在生成的 POCO 类中所做的所有更改。

  2. SqlMapperExtensions委托的使用:

    SqlMapperExtensions.TableNameMapper = (type) => { // do something here to pluralize the name of the type return type.Name; };

我不知道如何正确使用这个委托,以及在哪里放置它。我尝试了一段时间,但我确信我没有正确使用它:

在这行代码中,type.Name.Remove(type.Name.Length - 1, 1);我尝试实现一个函数,该函数切断 type 名称中的最后一个字母Student,假设 Dapper 将最后一个字母“s”添加到类的名称中,并在我的实现中将其删除。示例:Student => Students => Student(s) => Student

长话短说 - 我找不到如何实现一个将“单一化”我的表名的函数的解决方案。

我应该如何使用SqlMapperExtensions或者可能有另一种方法可以在不更改 POCO 类的情况下“单一化”表名?

0 投票
1 回答
667 浏览

c# - 如何使用 Dapper.Contrib 通过唯一键获取实体?

我有一个对象,假设

TheId是我的自动增量列,Name是我的唯一键。保存用户时,我想通过以下方式检查其存在:

但是,由于我的 Key is not Namebut TheId,我不能这样做。如果我将Name属性设置为[KeyExplicit]我想通过以下方式保存用户的时间:

这一次,dapper 期望TheId我填充的属性,而不是让数据库自动增加。

所以,我想知道是否有一种优雅的方法可以在搜索数据库时将一些属性或属性标记为 dapper 考虑。我不想通过Guid唯一键进行搜索。