如何使用 Dapper Extensions 映射从 POCO 获取 table 名称?

How to get table name from POCO with Dapper Extensions mappings?

我的数据库中有一个名为 MyTable 的 table。为此 table.

创建了一个 POCO class MyTablePoco

以下是Dapper Extensions的映射代码:

class MyTableMapper : ClassMapper<MyTablePoco>
{
    public MyTableMapper()
    {
        Table("MyTable");
        AutoMap();
    }
}

以下是我需要 table 来自 POCO class 的名称的代码:

private string GetTableName<T>()
{
    return typeof(T).Name.Replace("Poco", "");
}

我命名 POCO classes 的约定是 TableName + "Poco"。基于此约定,我将 "Poco" 替换为 class 名称的技巧非常有效,如上例所示。

但是,我想从映射配置中获取 table 名称。我认为这会更可靠,因为它避免了任何字符串处理和关于命名 POCO 的假设。

如何使用 Dapper Extensions 映射从 POCO class 获取 table 名称?

Dapper Extensions 项目开源;每个人都知道这一点。我从 GitHub 下载并修改它以满足我的需要。

此功能已存在于图书馆内部。

我在DapperExtensions.DapperExtensionsstaticclass中添加了如下函数:

public static string GetTableName<TPoco>() where TPoco : class
{
    return new SqlGeneratorImpl(_configuration).GetTableName(GetMap<TPoco>());
}

这里,TPoco是你的POCOclass。

此外,为了获取映射的列名,我添加了以下函数:

public static string GetColumnName<TPoco>(string propertyName) where TPoco : class
{
    return new SqlGeneratorImpl(_configuration).GetColumnName(GetMap<TPoco>(), propertyName, false);
}

这里,TPoco是你的POCOclass,propertyName是POCOclass的属性的名字。在 Framework 4.5 或更高版本中可以轻松获得 属性 名称:

nameof(myPocoInstance.MyProperty)

请注意,我不推荐将此作为标准解决方案;这只是一个适合我需要的技巧。我真的很想将其视为图书馆的一项常规功能。 如果您有更好的解决方案,请post回答。否则,请发表评论以改进此处建议的解决方案

在 GitHub 上提交了 pull request。现在已合并到 master 分支中。希望现在可以开箱即用,无需再下载和修改工具包源代码。请注意,我尚未对此进行验证。