3

私はAsp.Net web apiアプリケーションでリポジトリパターンを実装しています。汎用リポジトリパターンの実装 - エンティティキータイプ

public abstract class Repository<T> : IRepository<T> where T : EntityBase 
{ 
    private DbContext context_; 

    public Repository(DbContext context) 
    { 
     context_ = context; 
    } 

    public virtual async Task<T> GetAsync(int id) 
    { 
     return await context_.Set<T>().FindAsync(id); 
    } 

    ... 

} 

問題:ここで

私はintタイプを持つ単一のキーを持っているエンティティのために働く方法GetAsync(int id)を、持っています。

しかし、キーがstringのエンティティと、複合キーを持つエンティティがあります。

質問:

どのように私はこの問題を克服することができますか?

一般的な方法で問題を解決することはできますか?

答えて

3

あなたはFindAsyncは、パラメータとしてオブジェクトの配列を受け入れることに気付くことができますので、あなたはこのようなあなたのGetAsyncを変更することができます。

あなたがたとえば、あなたが好きなキーで GetAsyncを呼び出すことができます次に
public virtual Task<T> GetAsync(params object[] keys) 
{ 
    return context_.Set<T>().FindAsync(keys); 
} 

GetAsync(1); 
GetAsync("string key"); 
GetAsync(1, "composite key"); 

サイドフレーム:エンティティフレームワークSet<T>はすでに汎用リポジトリであるため、そのリポジトリを介して別のリポジトリを追加しても大きなメリットはありません。

+0

ありがとうございます!私は 'params object [] keys'に気付かなかった – Rahul

関連する問題