2

假设我有我的数据类

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

4

1 回答 1

2

我终于想出了这些扩展方法,它们从属性的类型和列名中检索表名:

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;
    }
}
于 2016-10-03T11:06:01.880 回答