假设我有我的数据类
[TableName("some_table")]
public class MyData
{
[ColumnName("some_column")
public string Name {get;set;}
}
现在我想对我的表执行一个纯SQL查询,但我不想在查询中硬编码表/列名。 例如。 "更新some_table set some_column = replace(some_column,' ...',' ...')"是坏的,因为表,列名称被硬编码到请求中。 我更喜欢"更新{{MyData}}设置{{Name}} = ...",其中{{MyData}} {{Name}}将替换为表格,列名称来自NPoco数据库映射。 是否可以从NPoco数据库中检索此信息?
答案 0 :(得分:1)
我终于想出了这些扩展方法,它们从属性的类型和列名中检索表名:
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;
}
}