4

我正在尝试 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();
        }

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

我读过这样的问题

使用类属性手动映射列名

Dapper.Rainbow VS Dapper.Contrib

(我遇到了与 Dapper.Contrib 类似的小问题,我会单独问)。

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

提前感谢您的帮助!

4

1 回答 1

7

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

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

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

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

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

于 2013-03-14T05:45:04.160 回答