2009-09-04 16 views
0

すべてのlinq2sqlクラスで基本的なメソッドを実行する汎用リポジトリを作成しようとしています。 (getById、insert、delete、getAll)linqtosqlクラスの汎用リポジトリのヘルプ

これを行う方法についてはわからない。 これまでのところ、getByIdメソッドはId属性を 'T'クラスに関連付けることができないため、エラーが発生しています。私はそれが(Idプロパティを持っていない)オブジェクトとしてタイプTのすべてのインスタンスを扱いますリポジトリクラス内

public class Repository<T> where T:class 
{ 
    private ClassesDataContext db = new ClassesDataContext(); 


public IQueryable<T> getAll() 
{ 
    return db.GetTable<T>(); 
} 
public T getById(int id) 
{ 
    db.GetTable<T>().Where(e=>e.Id==id); 
    return db.GetTable<T>().Single(c =>c.Id==id); 
}} 

答えて

0

このジェネリッククラスの概念のまわりで私の頭をラップする方法についていくつかのポインタをいただければ幸いです。

あなたは、このような基本エンティティクラスを作成することができますいくつかの一般的なサポートました:

public abstract class EntityBase 
{ 
    public int Id {get; private set; } 
} 

をし、リポジトリは、このクラスから継承を使用するすべてのエンティティを作成します。

代わりにあなたが持っている1のところあなたはその後、これを格納するリポジトリクラス定義を更新する必要があります:

public class Repository<T> where T: EntityBase 

これは、リポジトリメソッド内の型TのすべてのインスタンスがEntityBaseとして扱われるようになりますこれはIdメソッドを定義します。 (getById方法でWHERE句)型T

あなたはSQL文字列を構築し、それを実行する必要があります

のために知っているされていないプロパティbecuaseアイテムを取得するために

+0

ねえ、...しかし、私は私のコントローラ にリポジトリをインスタンス化する方法を知りません リポジトリ companyrepository =新しいリポジトリ(); エラー – ignaciofuentes

+0

あなたの会社のクラスはEntityBaseクラスを継承していますか? –

+0

いいえ、会社のクラスはデザイナーとlinqtosqlクラスとして自動的に作成されました...それから継承しなければならない場合、病気は別のアプローチを探す必要があります – ignaciofuentes

0

あなたは、ラムダ式を使用することはできません。

string query = "SELECT * FROM [SomeTable] WHERE [SomeColumn] = {0}"; 
return db.ExecuteQuery<T>(query, id).FirstOrDefault(); 

あなたは次を使用して、テーブル名を取得することができ、型Tのためのテーブル名とPrimaryKeyNameを取得する必要があります:

db.Mapping.GetTable(typeof(T)).TableName; 

あなたが使用して主キー列のリストを取得することができます。

db..Mapping.GetTable(typeof(T)).RowType.IdentityMembers.Select(m => m.MappedName).ToArray(); 

それぞれのリポジトリが基本クラスから離れても構わない場合は、TableNameとPrimaryKeyの2つのフィールドを簡単に設定できます。

Linq2Sql用の完全な汎用DAL /リポジトリを構築する作業はたくさんあります。分離されたエンティティの一般的なSave、Updateメソッドを作成するのは本当に楽しいものです。

-Douglas H.

+0

おっと、私の間違い。私はあなたのデータベース用の特定のDataContextを作成していたことに気づいていませんでした。私はあなたが汎用のDataContextクラスを作成していると思っていました。 Jirapongは正しいです。 – Douglas

関連する問題