考慮すべきもう 1 つのアイデアは、Linq と ToString() を使用することです。
たとえば、これは次のとおりです。
context.Widget.Select(c => c.Property).ToString()
SQL Server Provider の場合は次のようになります。
"SELECT [Var_3].[WidgetProperty] AS [WidgetProperty] FROM [dbo].[Widget]..."
これで、結果の SQL を解析する拡張メソッドですべてを非表示にすることができます。これは、疑似コードのように見えます。
Assert.IsTrue(context.Widgets.GetSqlColumnNameFor(w => w.Property).IsNamed("WidgetProperty"));
延長案 :
public string GetSqlColumnNameFor<TSource>(this DbSet<T> source, Expression<Func<TSource, TResult>> selector)
{
var sql = source.Select(selector).ToString();
var columnName = sql... // TODO : Some regex parsing
return
columnName;
}
同様に、GetSqlTableNameFor() を作成することもできます。
更新:私はいくつかの専用の SQL パーサーを探すことにしたので、このソリューションはより一般的です。明らかに .NET にはそのようなものがあります:
http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general-sql-parser/generate-internal-query-parse-tree-in-xml-for-further-処理/