C# getById函数在存储库模式中接受一个或多个键

C# getById函数在存储库模式中接受一个或多个键,c#,entity-framework-6,asp.net-core-2.2,C#,Entity Framework 6,Asp.net Core 2.2,因此,我使用asp.net核心和entity framework 6的存储库模式从服务层访问数据库。问题是我有一个具有复合键的实体,而通用存储库将int作为参数,因此我无法传递多个变量来查找() 我尝试将int改为object,并在需要时发送带有2个ID的对象,但这似乎不起作用 public interface IRepository<T> where T : class { IEnumerable<T> GetAll(); T GetById( int

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

我尝试将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);
}
公共接口i假设,其中T:class
{
IEnumerable GetAll();
T GetById(int-id);
无效更新(T实体);
无效创建(T实体);
无效删除(T实体);
}

您可以使其与find方法的签名相同

public virtual TEntity Find(params object[] keyValues);
将键值接受为
对象类型的
参数

就这样吧

T GetById(params object[] keyValues);
因此,在这种情况下,它将接受任何类型的主键的任何计数

e、 g


依此类推

为什么不能定义像
IRepository
这样的通用存储库来扩展可能的关键使用场景?这会起作用,但我必须为某些存储库验证getbyId函数,以便包含相关表和params对象[]即使我尝试转换为Int,也无法工作这是我当前的代码,具有重写的getByiid Context.UserSkills.SingleOrDefault(userSkill=>userSkill.UserSkillId==convert.ToInt32(UserSkillId));首先,您应该在主界面IRepository中将其更改为find函数的相同签名,然后将getByiid重写为Context.UserSkills.find(keyValues);无需进行任何转换,只需从重写的函数传递参数即可直接查找函数。这是否也适用于应该返回键的Add(T entity)方法?那么,它是否会返回object[],而不是返回int?
new customerRepo().GetById(123)
new customerRepo().GetById(123,1)