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); 
    } 

    ... 

} 

問題:

在這裏,我有一個方法GetAsync(int id),這將爲具有與int類型的單個鍵實體工作。

但是有一些實體的密鑰爲string類型和一些帶有複合鍵的實體。

問:

我怎樣才能解決這個問題?

是否有可能以通用的方式解決問題?

回答

3

你可以注意到FindAsync接受對象作爲參數數組,這樣你就可以改變你的GetAsync這樣的:

public virtual Task<T> GetAsync(params object[] keys) 
{ 
    return context_.Set<T>().FindAsync(keys); 
} 

然後你可以打電話GetAsync與你喜歡的任何鍵,例如:

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

備註:實體框架Set<T>已經是通用存儲庫,因此在其中添加另一個存儲庫實際上並沒有帶來太多好處。

+0

謝謝!我沒有注意到'params object []鍵' – Rahul