如何使用 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.DapperExtensions
static
class中添加了如下函数:
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
分支中。希望现在可以开箱即用,无需再下载和修改工具包源代码。请注意,我尚未对此进行验证。
我的数据库中有一个名为 MyTable
的 table。为此 table.
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.DapperExtensions
static
class中添加了如下函数:
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
分支中。希望现在可以开箱即用,无需再下载和修改工具包源代码。请注意,我尚未对此进行验证。