假设我有我的数据类
[TableName("some_table")]
public class MyData
{
[ColumnName("some_column")
public string Name {get;set;}
}
现在我想对我的表执行简单的 SQL 查询,但我不想在查询中对表/列名称进行硬编码。 例如。 “update some_table set some_column = Replace(some_column, '...', '...')” 不好,因为表、列名被硬编码到请求中。 我更喜欢类似“update {{ MyData }} set {{ Name }} = ...”的内容,其中 {{ MyData }} {{ Name }} 将替换为 NPoco 数据库映射中的表、列名称。 是否可以从 NPoco 数据库检索此信息?
最佳答案
我最终想出了这些扩展方法,可以从属性的类型和列名中检索表名:
public static class NPOCOExtensions
{
public static string GetTableNameFromType<T>(this Database db)
{
return db.PocoDataFactory.TableInfoForType(typeof(T)).TableName;
}
public static string GetColumnNameFromProperty<T>(this Database db, Expression<Func<T, object>> selector)
{
var memberName = ((MemberExpression)selector.Body).Member.Name;
var columnName = db.PocoDataFactory.ForType(typeof(T)).Members.Where(x => x.Name == memberName).First().PocoColumn.ColumnName;
return columnName;
}
}
关于sql - NPoco 纯 SQL 请求,其中的表、列名从数据库映射中替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39829131/