2

我对这门课有以下挑战:

Public Class MyClass
    Property Id As Integer
    Property LastName as String
End Class

数据库中对应的数据表有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 看起来很有希望。

任何人?

4

1 回答 1

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();
    }
}

代码示例使用 C#。您必须将其翻译成 VB.NET。

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

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

于 2018-01-24T05:41:43.063 回答