我正在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
的实体和一些键组合的实体。问题:
我怎样才能克服这个问题?
有没有可能用一般的方法解决这个问题?
最佳答案
您可以注意到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");
附带说明:entity framework
Set<T>
已经是通用存储库,因此在该存储库之上添加另一个存储库并不会真正增加很多好处。