C# getById函数在存储库模式中接受一个或多个键
因此,我使用asp.net核心和entity framework 6的存储库模式从服务层访问数据库。问题是我有一个具有复合键的实体,而通用存储库将int作为参数,因此我无法传递多个变量来查找() 我尝试将int改为object,并在需要时发送带有2个ID的对象,但这似乎不起作用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
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)