【问题标题】:How to get table name from POCO with Dapper Extensions mappings?如何使用 Dapper Extensions 映射从 POCO 获取表名?
【发布时间】:2018-02-27 08:12:17
【问题描述】:

我的数据库中有一个名为 MyTable 的表。为该表创建了一个 POCO 类 MyTablePoco

以下是 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 类中获取表名?

【问题讨论】:

    标签: c# dapper dapper-extensions


    【解决方案1】:

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

    此功能已在库内部提供。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-18
      • 2011-11-22
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      相关资源
      最近更新 更多