2010-12-06 12 views
1

私は多くの単一の分離されたテーブルを持つデータベースを持っており、その内容をEntitiesに記入する必要があります。EF4:文字列として指定されたEntitySetを取得する

は現在、私はこのような一人ひとりのテーブルの何かを持っている:

try 
{ 
    using(DBContext context = new DBContext()) 
    { 
     var vehicleTypes = context.VehicleTypes; 
     return vehicleTypes; 
    } 
} 
catch(Exception ex) 
{ 
//handle error 
} 

私は最高のこのような何かとして記述されているために求めています:

var vehicleTypes = context.GetEntitySet(VehicleEntity); 
var buildingTypes = context.GetEntitySet(BuildingEntity); 

どこVehicleEntityBuildingEntity(。 ..)は、エンティティモデルからのエンティティです。 私はこのオプションを明示的には持っていないことを知っていますが、それと似たような方法が良いでしょう。拡張メソッドもオプションです。

私はEntityFramework 4.0、POCOセルフトラッキングエンティティ(プロキシなし)と一緒に作業しています。

おかげ

編集

public static IEnumerable<TEntity> GetTableContent<TEntity>() where TEntity:class 
    { 
     try 
     { 
      using (var context = new DBEntities()) 
      { 
       var result = context.ExecuteStoreQuery<TEntity>("SELECT * FROM " + typeof(TEntity).Name); //the table names correspond to Entity type class names 
       return result; 
      } 
     } 
     catch (Exception ex) 
     { 
      //handle error... 
     } 
    } 

が、私はエラーを取得::私の最新の試みは、これだった

The data reader is incompatible with the specified 'DBEntities.MyEntity'. A member of the type, 'Id', does not have a corresponding column in the data reader with the same name.

をし、それが本当だ - 名前がありませんマッチ - 私はそれがedmxの定義に基づいてクエリからテーブルをマップしただろうと思った?どうすればこの権利を得ることができますか?

答えて

-3

実際にこれは便利ですどのように

result = context.ExecuteStoreQuery<Something>("SELECT SOMETHING_ID AS ID, ..., FROM SOMETHING..."); 
+0

それは「汎用」にしようとする前に動作するコードでスタート?それがうまくいくのであれば好奇心をそそることができます(私はそれを試しました)。しかし、それは私が必要とするものではありません - 私はそれを "汎用"にする必要があります(つまり、edmxの定義にマップできるようにする必要があります) – veljkoz

+2

次にストアのクエリを実行する理由は?それだけで難しくなります。 'ObjectContext.CreateObjectSet 'の何が問題なのですか? 'ExecuteStoreQuery'の使い方を聞いていると思った。 –

+2

合意。 'CreateObjectSet 'を使ってください。複数のサービスを使ってジェネリックに動的に行うことができます。 – RPM1984

関連する問題