NPoco纯SQL请求与表,列名从数据库映射替换?

时间:2016-10-03 10:08:20

标签: sql orm npoco

假设我有我的数据类

[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数据库中检索此信息?

1 个答案:

答案 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;
    }
}