2016-10-03 38 views
1

假設我有我的數據類NPoco普通SQL請求與表,列名取代數據庫映射?

[TableName("some_table")] 
public class MyData 
{ 
[ColumnName("some_column") 
public string Name {get;set;} 
} 

現在我想對我的表上執行一個簡單的SQL查詢,但我不希望我的查詢進行硬編碼表/列名。 例如「更新some_table設置some_column =替換(some_column,'...','...')」是不好的,因爲表,列名被硬編碼到請求中。 我更喜歡「update {{MyData}} set {{Name}} = ...」,其中{{MyData}} {{Name}}將被來自NPoco數據庫映射的表,列名取代。 是否有可能從NPoco數據庫檢索此信息?

回答

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