Rah*_*hul 4 c# generics entity-framework repository-pattern asp.net-web-api2
我正在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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
问题:
在这里,我有一个方法GetAsync(int id),该方法适用于具有单个键和int类型的实体。
但是,有些实体具有键string类型,有些实体具有复合键。
题:
我该如何克服这个问题?
是否有可能以通用方式解决该问题?
您会注意到,FindAsync接受对象数组作为参数,因此您可以这样更改GetAsync:
public virtual Task<T> GetAsync(params object[] keys)
{
return context_.Set<T>().FindAsync(keys);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以GetAsync使用任何喜欢的键进行呼叫,例如:
GetAsync(1);
GetAsync("string key");
GetAsync(1, "composite key");
Run Code Online (Sandbox Code Playgroud)
旁注:实体框架Set<T>已经是通用存储库,因此在该存储库上添加另一个存储库并不会带来太多好处。
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |