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 に答える