首页 > 解决方案 > getById 函数在存储库模式中采用一个或多个键

问题描述

所以我使用带有 asp.net 核心和实体框架 6 的存储库模式从服务层访问数据库。问题是我有一个具有复合键的实体,而通用存储库将 int 作为参数,因此我无法将多个变量传递给 find()。

我尝试将 int 更改为 object 并在需要时发送具有 2 个 id 的对象,但这似乎不起作用。

public interface IRepository<T> where T : class 
{
    IEnumerable<T> GetAll();
    T GetById( int id);
    void Update(T entity);
    void Create(T entity);
    void Delete(T entity);
}

标签: c#entity-framework-6asp.net-core-2.2

解决方案


你可以让它与 find 方法的签名相同

public virtual TEntity Find(params object[] keyValues);

接受键值作为params类型object

所以它会是

T GetById(params object[] keyValues);

所以在这种情况下,它将接受任何类型的主键的任何计数

例如

new customerRepo().GetById(123)
new customerRepo().GetById(123,1)

等等


推荐阅读