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

Dab*_*rnl 2 dapper dapper-extensions dapper-fastcrud dapper-contrib

我在这门课上遇到了以下挑战:

Public Class MyClass
    Property Id As Integer
    Property LastName as String
End Class
Run Code Online (Sandbox Code Playgroud)

数据库中对应的数据表有如下字段: 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 看起来很有前途。

任何人?

Ami*_*shi 6

所以,基本上这里的问题是属性名和列名不同。

使用Dapper,您可以通过为 SQL 查询中的列名提供别名来处理此问题。我猜你已经尝试过这个,因为你在你的问题中说“我写了一个自定义插入查询”。此处讨论了将列名与属性映射的其他多种方法。

使用DapperExtensions,您可以将不同的列名称与其各自的属性进行映射,如下所示:

public sealed class MyClassMapper : ClassMapper<MyClass>
{
    public MyClassMapper()
    {
        Table("MyTable");
        Map(x => x.Id).Key(KeyType.WhatYouWant);
        Map(x => x.LastName).Column("Last-Name");
        AutoMap();
    }
}
Run Code Online (Sandbox Code Playgroud)

代码示例使用 C#。您必须将其转换为 VB.NET。

使用Dapper.Contrib,您可以使用[Table]属性装饰类以映射表名。或者,您可以使用SqlMapperExtensions.TableNameMapper映射表。有关更多详细信息,请参阅博客文章或以及SO 文章。
显然,有没有办法映射列名。此功能计划用于下一个主要 (2.x) 版本。2.x版本发布;但问题仍然存在。查看发行说明,功能尚未添加。

随着Dapper.FastCrud,有多种方式进行映射。您可以使用[Column]属性装饰该属性。