2016-03-21 7 views
2

私はASP.Net 5/EF7を使用して新しいWebアプリケーションを開発中です。EF7を使用したリポジトリパターン

また、Entity Frameworkと一緒にリポジトリパターンを検討しています。

私はジェネリックリポジトリクラスに対処するためのアドバイスを探しています。 EF7にはまだFind()メソッドがないので、ジェネリックリポジトリクラスにGetById(int id)のようなメソッドを実装するのが難しいです。代わりにFirstOrDefault()を使うことができますが、モデルから実際のIdにアクセスすることはできません。

代替手段を見つけるのを手伝ってもらえますか? サイード

+0

参照できるTEntityには共通のプロパティ/フィールドがありますか?あなたは 'TEntity'がどのように見えるかを見せてもらえますか? – Nkosi

+0

TEntityは後でリポジトリクラスに渡すときのモデルになります。これは一般的なリポジトリクラスです。この場合、TEntityは、例えば、人。 – Xerxes1TheGreat

答えて

1

ここにあなたが試みることができる何かがある

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class 
{ 
    protected readonly PersonDBContext _dbContext; 

    public Repository(PersonDBContext context) 
    { 
     _dbContext = context; 
    } 

    public IEnumerable<TEntity> GetAll() 
    { 
     return _dbContext.Set<TEntity>().ToList(); 
    } 

    public TEntity Get(int? id) 
    { 
     return _dbContext.Set<TEntity>().FirstOrDefault(); 
    } 

    public IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate) 
    { 
     return _dbContext.Set<TEntity>().Where(predicate); 
    } 

    public void Add(TEntity entity) 
    { 
     _dbContext.Set<TEntity>().Add(entity); 
    } 

    public void Remove(TEntity entity) 
    { 
     _dbContext.Set<TEntity>().Remove(entity); 
    } 
} 

ありがとう:

は、以下の私の一般的なリポジトリクラスです。

モデルの実際のIDが分からないというご意見に基づき、Findのような式を使用して、探しているエンティティを取得してください。

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class { 
    //..... 

    public TEntity Get(Expression<Func<TEntity, bool>> predicate) 
    { 
     return _dbContext.Set<TEntity>().FirstOrDefault(predicate); 
    } 

    //..... 
} 
+0

これは良いアプローチです、ありがとうございます。しかし、これは私が多くのモデル(データベースからコードファースト)を持ち、すべてがこのインターフェースから派生しなければならないので、これが効率的な方法だと思いますか? – Xerxes1TheGreat

+0

その場合、式routeを使用して最初の結果を得ることができます。それを反映する答えを編集します。 – Nkosi

+0

おかげさまでありがとうございました。はい、そうです、Find()にはこのテクニックを使用しました。実際にはEF7には何も見つかりませんでしたし、GetById()でも同じメソッドの実装を使用できることに気づいていませんでした。あなたの助けをもう一度お返事します – Xerxes1TheGreat

1

私はあなたの代わりにのみ有していると、あなたの一般的なインターフェースに別のパラメータを追加する必要がありますあなたがGeneric Repository using EntityFramework

でそれを確認することができ、一般的なリポジトリを作成する方法について説明します私のブログで記事を作成しましたエンティティタイプを指定すると、基本キータイプも渡すことができます。また、基本クラスを使用することもできます。

+0

私の友人に感謝して、あなたのアイデアも賢いです。私は見て、いくつかのメモを作った。どうもありがとう。 – Xerxes1TheGreat

関連する問題