2017-12-13 8 views
1

私は自分のコードの一部を一般化しようとしています。

ungenericコード:データベースからオブジェクトを取り出す一般的な方法

public static User GetUser(int id) 
    { 
    using (var db = new BroodNodigContext()) 
    { 
     return db.Users.FirstOrDefault(u => u.Id == id); 
    } 
    } 

私は必要なコードが、それはつばだに刻んだ:私が得たもの

public static object FooBar<T>(int id) 
    { 
    using (var db = new DatabaseContext()) 
    { 
     return db.T.FirstOrDefault(t => t.Id == Id); 
    } 
    } 

public static object GetTypeOutOfDatabase<T>(int id) 
    { 
    using (var db = new DatabaseContext()) 
    { 
     dynamic test = typeof(T); 
     db.Set<test>(); 

     return null; 
    } 
    } 

私は私ができることを言われましたdb.Set<>()を使用して一般的にしますが、正しく使用することはできません。
参考タイプ(Userなど)にTを作成する方法を知っていますか?db.set<>()に入れることはできますか?

+3

もう少し複雑になり、独自のカスタム式を生成する必要があるかもしれません'test'変数を忘れて、オブジェクトではなく' T'を返します。 – DavidG

+2

コードベース内のすべてを 'オブジェクト 'にすることは、さまざまな潜在的な問題の招待状のようです。 – David

答えて

0

エンティティフレームワークには、主キーで検索するFind機能が用意されています。

NOTEこれはちょうど私はそれが簡単に

を呼び出すために作るためのparamsを提供してきましたハックとして、それは魔法レッツのEFの仕事にあなたのIDを渡し、findメソッドで使用されているオブジェクト[]になります
public static object FooBar<T>(params object[] id) 
{ 
    using (var db = new DatabaseContext()) 
    { 
     return db.Set<T>().Find(Id); 
    } 
} 

これは、あなたのユースケースのために動作しますが、後であなたにあなたがそれはあなたが必要とするだけで `db.Set ()`だ

関連する問題