2012-02-22 11 views
1

generic listに関する質問があります。Entity Framework、generic List

私は、Userテーブル、Orderテーブル、Itemテーブルという3つのテーブルを含むデータベースがあるとします。

C#コードでは、3つのテーブルのいずれかからレコードをすべて取得するためにGetListという関数が必要です。

genericメソッドを使用しない場合は、GetAllUsers()、GetAllOrders()、GetAllItems()のような3つのメソッドを作成する必要があります。これらの3つのメソッドの中で、私はデータベースに問い合わせるためにlinqを書く必要があります。

私の質問は、一般的な方法を実装する方法です。

私はEF 4.1を使いたいです。私はNHibertを使ってそれを行う方法を知っています。これについて

UPDATE

何?私はそれがデータベース最初のモデルである、EFによって生成されることが

 public T GetSingleEntity<T>(Expression<Func<T,bool>> expression) where T:class 
    { 
     using (PersonalLinksEntities dbContext = new PersonalLinksEntities()) 
     { 
      return dbContext.CreateObjectSet<T>().SingleOrDefault(expression); 
     } 

    } 

PersonalLinksEntities 1つのレコードを取得するために使用することができ、別のポストから、それを発見しました。ここで

は、すでに書かれているものに関するご質問には詳細が存在しないので、私は

public ActionResult Index() 
    { 
     var thisOne = base.GetSingleEntity<PersonalRecord>(r=>r.RecordID==1);    
     return View(); 
    } 

答えて

1

特定の実装は、データにアクセスするために使用しているものに依存します。 NHib、EF、L2S?これらはすべて一般的にIQueryableにアクセスする何らかの方法を持っています。

次のような方法を公開することができます:

public IQueryable<T> GetQueryable<T>() 
{ 
    //Implementation depends on your data provider 
    //return dataContext.GetTable<T>(); 
    //return session.Query<T>(); 
} 

しかし、おそらく何がやりたいことは種類ごとに異なるリポジトリとリポジトリのパターンに従ってくださいです。しかし、型パラメーターを受け入れ、再利用可能な抽象基本リポジトリーを使用することができます。

public abstract class RepositoryBase<T> 
{ 
    public IQueryable<T> GetQuery() 
    { 
    //Implementation determined by provider 
    } 

} 
+0

私のdbContextは自動的にEFによって生成されるので(データベース最初)、.GetTable()というメソッドもありません。そのため、高度な方法を見つけようとしています。 – HorseKing

+0

//セッションを返します。クエリ();それはNHibrateですね。 – HorseKing

+0

ええ、ちょうどいくつかの例が飛び出しました...私はEFよりNHIbの人です。それはちょうど多くの点で優れています。 – swannee

0

このメソッドを呼び出す方法です。テーブルからすべてのレコードを取得したいだけなら...なぜLINQ ...?メソッド内でデータセットとデータアダプタを使用してデータベースにクエリを実行するだけで、テーブル名を渡してデータセットを取得した後、そのデータセットで好きなように再生することができます。私が紛失しているこのケースでは、特定の複雑さがある場合、詳細を教えてください。

0

DbContextには、Setという名前のメソッドが既に存在します。 var results = dbContext.Set();

ObjectContextを使用している場合、必要なメソッドはCreateObjectSet()です。

関連する問題