c# - Dapper.Rainbow 与现有的数据库模式

标签 c# dapper dapper-rainbow

我正在试用 Dapper。我喜欢我到目前为止所看到的。为了做简单的 CRUD,我使用 Dapper.rainbow。它工作得很好。但是,它仅在表具有名称为 Id 的标识列时才有效。拥有这样的数据库是有意义的,但我不能仅仅为了使用 Dapper 就要求更改数据库中的列名。更清楚地说,我正在使用像 Northwind Db 这样的数据库。它在 Id 列中到处都有重复的表名。

为了解决这个问题,我更改了 Dapper.Rainbow 代码如下:

   public T Get(TId id,string idColumnName="Id")
        {
            return database.Query<T>("select * from " + TableName + " where               "+idColumnName+" = @id", new { id }).FirstOrDefault();
        }

有没有更好的方法来处理这个问题,例如列映射/注释或完全不同的东西?

我看过这样的问题

Manually Map column names with class properties

Dapper.Rainbow VS Dapper.Contrib

(我在Dapper.Contrib遇到过类似的小问题,我会单独问的)

更新 - 不确定答案是否适用于我的 Dapper.Rainbow 问题(至少,我不知道如何适用)。

提前感谢您的帮助!

最佳答案

我遇到了类似的问题。现有的 Dapper 扩展不符合我的理想模式。我想要简单的 CRUD 操作和智能默认值,没有任何额外的东西。我还希望模型具有不直接映射到数据库的附加属性。例如 - FullName 属性在其 getter 中组合了 FirstName 和 LastName - 并且不将 FullName 添加到 Insert 和 Update 语句。

在大多数情况下,我希望主键列是 Id,但允许用属性覆盖。

最后,我希望表名默认与类名匹配,但允许用属性覆盖。

我最终编写了自己的 Dapper 扩展来解决这些问题。它在 Github 和 Nuget 上。希望对您有所帮助。

https://github.com/ericdc1/Dapper.SimpleCRUD

关于c# - Dapper.Rainbow 与现有的数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314181/

相关文章:

c# - 如何让 Dapper.Rainbow 在 SQLite 中使用 AutoIncrement 插入到表中?

orm - Dapper.Rainbow VS Dapper.Contrib

c# - 最小起订量单元测试 - 值不能为空

c# - 从 Dapper 连接但从 EF 6 工作的神秘身份验证错误 - 相同的 ConnectionString

c# - 用dapper查询oracle的集合参数

c# - 如何使用 Dapper 将字符串作为 NULL 发送到 SQLServer?

c# - Dapper 查询结果在对象中将表的 Pk 设置为 null

dapper - 忽略模型属性上的属性

c# - FormsAuthentication 适用于除 IE 之外的所有浏览器

c# - 是否可以使用相关状态对象在消息检查器中传递 channel 数据?