2012-01-22 9 views
0

DbSet(非ジェネリック)、string、およびobjectを受け入れ、DbSetを返す関数を実装したいと思います。次pseuduのようなもの:非汎用DbSetから列を選択しますか?

public static DbSet Any(DbSet set, string propertyName, objectParameter) 
{ 
    var tableName = set.TableName; 
    var columnName = set.GetColumnNameForProperty(propertyName); 
    var query = string.Format("SELECT TOP(1) {0} FROM {1} WHERE {0} = {2}", 
       columnName, 
       tableName, 
       objectParameter); 
} 

私はデータベース(context.Database.ExecuteSql)上で直接それを実行できるようになりますので、SQLクエリが十分にあると思います。

私がしたいのは、与えられたDbSetからテーブル名を取得してから、データベースの列名を取得することです。

答えて

1

それは非ジェネリックDbSetから可能ではないが、この問題は簡単に使用することによって解決することができます:あなたがデータを照会たら、それはもうDbSetではないので

public static IEnumerable<T> Any(DbSet<T> set, string property, objectParameter) 
    where T : class 
{ ... } 

DbSetを返すことは意味がありません。

大きな問題は、テーブル名を汎用DbSet/ObjectSetから取得していることです。これらのクラスではこの情報が利用できないためです。それはit requires accessing non public membersの項目のうち、MetadataWorkspaceのものなので、それを得ることはほとんど不可能です。

+0

私はメタデータワークスペースアプローチを使用しました。 – Shimmy

関連する問題