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

c# - 使用 Dapper.Contrib 插入和多重映射

我正在尝试做的是能够使用复杂的对象进行检索和写回数据库。

例如,我有两个班级

我使用下面的方法填充父对象

我的问题现在我有我的填充对象,说我想对 Parent 进行更改,包括从 Parent.Children 添加/更新/删除值

这是我第一次使用更新方法,但我认识到这里存在一些问题,例如根据子 ID 是否为零来确定更新或插入,以及这有点冗长。

有没有办法,我是否缺少 Dapper 或 Dapper.Contrib 的某些功能,这些功能将提供帮助方法来简化此过程?

0 投票
3 回答
884 浏览

c# - 根据场景插入应该映射到不同数据库表的对象

我有一个对象,其属性名称与数据库表中的字段名称完全一致,但我不确定如何插入它。唯一不同的是数据库表名。所以它是一个具有不同模型/映射表名称的对象,但我希望将它插入到名称与模型不同的表中。我试过这个:

例如在哪里

对象是FooBarObj,属性是int Id, string Foo, string Bar

并且DBInformation具有字段名称:Id, Foo, and Bar但表没有被调用FooBarObj,它被调用DBInformation

我怎样才能插入这样的东西?我正在使用 Dapper

编辑:

FooBar 模型可以有两个表属性吗?

例如[Table("DBInformation")][Table("FooBar")]

我有一个奇怪的边缘情况,如果发生这种情况,我想插入 FooBar,如果发生另一种情况,插入 DBInformation。这就是我目前面临的问题,因此这就是为什么我不能只添加属性并解决这个问题。

0 投票
3 回答
1703 浏览

c# - Dapper UpdateAsync ignore column

I am trying to update with Dapper.Contrib this table:

I don't want to update the CreateUserID column because it is an update method so that I want to ignore this column while calling the Dapper - Update.Async(entity) method.

I tried using [NotMapped] and [UpdateIgnore] attributes but no help.

Note: I still want this column to be passed on insert operations, therefore, [Computed] and [Write(false)] is not appropriate.

Can someone help me figure out how to ignore this column when updating the table in the database?

0 投票
1 回答
154 浏览

c# - 如何从 C# 中的父对象访问子对象字段?

我使用 Dapper.net 作为 ORM。我有一个名为 BusinessObject 的抽象类,它由代表数据库中表的其他类继承,例如 SubContractorJob。

我在 BusinessObject 类上有一个名为“Persist”的方法,它将记录保存到数据库中:

目前,如您所见,Persist 方法将对象作为输入。

这意味着当我从 BusinessObject 类继承时,我必须从我的子对象中这样调用它:

我的问题是:当我已经在 s(子对象)的上下文中调用该方法时,如何在不传递“s”的情况下完成这项工作?

我确实设置了一个接口(IDBObject),因此始终保证子对象具有 Id 字段。

我试过这个:

但是得到了这个错误:

谢谢你的帮助!

0 投票
1 回答
3836 浏览

dapper - 有没有办法使用 Dapper 的一些 .Insert 扩展方法将属性映射到列名?

我对这门课有以下挑战:

数据库中对应的数据表有as字段: Id (int, not null) Last-Name (nvarchar(80),null)

所以我需要映射MyClass.LastNameMyClasses.Last-Name度过一段地狱般的时光......

当我编写自定义插入查询时,一切正常,但我想使用 Dapper 扩展包之一的 .Insert 语句。

我尝试了 Dapper.Contrib,但这忽略了我使用 Dapper.FluentMap 或使用 Dapper 本身的内置方法创建的映射Dapper.SetTypeMap

我尝试了 Dapper.FastCrud,但我无法弄清楚如何为其配置映射,尽管这个 API 看起来很有希望。

任何人?

0 投票
1 回答
318 浏览

orm - DapperContrib - 使用抽象类更新

我有一个这样的低音课:

然后我有

现在我想编写一些通用方法来使用 Dapper.Contrib 处理更新

//某处的某个类..

现在我想更新对象:

Dapper.Contrib 给了我这个信息:

{"实体必须至少有一个 [Key] 或 [ExplicitKey] 属性"}

我无法找到使用抽象基类的示例。我想也许 UpdateProposal 的类型应该是 Document 但我得到了相同的消息。

谢谢您的帮助。我相信这很简单。

编辑:我找到了一半的答案。我开始只使用一个类(没有抽象)进行测试并得到了同样的错误。经过进一步研究:

Dapper.SimpleCRUD 插入/更新/获取失败并显示消息“实体必须具有至少一个 [Key] 属性”

我发现使用 Key [Dapper.Contrib.Extensions.Key] 可以解决这个问题。似乎来自 ystem.ComponentModel.DataAnnotations 的 Key 也应该有效?

如果不是这样,那让我有点难过,因为任何想要使用 ORM 的服务都必须了解 Dapper,而我希望避免使用映射器。

不过,现在要尝试再次分解班级,看看是否至少可以解决眼前的问题。

M。

0 投票
1 回答
180 浏览

c# - 如何使用接受 Dapper.Contrib 方法的集合?

Dapper.Contrib (https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib)声明他们有几种接受 IEnumerable 列表的方法,但是我似乎找不到任何这些方法。使用 .NET Core 2,这是过时的 readme.md 还是与 .NET Core 不兼容?

缺少方法:

我已经用普通的 Dapper 和一些 SQL 让它工作了,但我只是对这些方法的位置感兴趣。

0 投票
1 回答
461 浏览

dapper - 使用 Dapper.Contrib 存储过程

我是 Dapper 的新手,我想使用 Dapper.Contrib。是否有任何方法可以将存储过程与 Dapper.Contrib 方法一起使用。

例如 Dapper.Contrib 的方法是connection.GetAll<Invoice>().ToList();. 我想在这个扩展方法中调用存储过程。

0 投票
1 回答
737 浏览

c# - Dapper.Contrib AS 实体,为什么会失败?

我计划将 Contrib 与 dapper 一起使用,使我在桌面应用程序中的类看起来像这样

那么任何 Concept 类都将继承自 DB 类;像这样

使用测试类

这个样本总是失败并给了我

“)”附近的 SQL 逻辑错误:语法错误

但是当我Insert()在子类中实现方法时效果很好!问题是:我的代码包含很多类,重写所有 CUD 操作是如此令人不安,有什么想法可以用更少的代码解决这个问题吗?

0 投票
1 回答
852 浏览

c# - Dapper.Contrib - InsertAsync 无法插入 HIERARCHYID 键

我们的项目中有一个主键为 HIERARCHYID 类型的表:

以及与 Dapper 查询一起使用的相应类:

对象被创建并初始化,InsertAsync 被调用,并立即以“无法将 Null 插入 Id 字段”而失败,即使调试显示 Id 不为空并且在我们尝试插入的位置具有正确的值。

[ExplicitKey] 属性专门为修复此类情况而添加的,但看起来......不是吗?我还能在这里错过什么?