编程语言
首页 > 编程语言> > c#-实现通用存储库模式-实体键类型

c#-实现通用存储库模式-实体键类型

作者:互联网

我正在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类型键的实体.

但是,有些实体具有字符串类型的键,而有些实体具有复合键.

题:

我该如何克服这个问题?

是否有可能以通用方式解决该问题?

解决方法:

您会注意到,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>已经是通用存储库,因此在该存储库上添加另一个存储库并不会带来太多好处.

标签:asp-net-web-api2,repository-pattern,generics,c,entity-framework
来源: https://codeday.me/bug/20191026/1933953.html