0

我的数据库中有一个带有名称的表MyTableMyTablePoco为该表创建了一个 POCO 类。

以下是 Dapper Extensions 的映射代码:

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

以下是我需要来自 POCO 类的表名的代码:

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

我命名 POCO 类的约定是TableName + "Poco". 根据这个约定,我从类名中替换“Poco”的技巧效果很好,如上例所示。

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

如何使用 Dapper Extensions 映射从 POCO 类中获取表名?

4

1 回答 1

1

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

此功能已在库内部提供。

我在课堂上添加了以下功能DapperExtensions.DapperExtensions static

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

TPoco是您的 POCO 课程。

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

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

在这里,TPoco是您的 POCO 类,并且propertyName是 POCO 类的属性名称。可以很容易地在 Framework 4.5 或更高版本中获取属性名称:

nameof(myPocoInstance.MyProperty)

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

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

于 2018-03-16T12:45:28.907 回答