C# 将动态导航属性列表传递到我的存储库类以用作。包括
我有以下存储库方法:-C# 将动态导航属性列表传递到我的存储库类以用作。包括,c#,entity-framework,generics,entity-framework-6,C#,Entity Framework,Generics,Entity Framework 6,我有以下存储库方法:- public async Task<Skill> FindSkill(int id) { return await context.Skills.Include(a=>a.History)SingleOrDefaultAsync(a => a.SkillID == id); } 但我的问题是,我是否可以使我的repo方法更通用,并向它传递一个导航属性列表(零或更多),以便在.Include()中使用?这里有两种实现方法 Include(字
public async Task<Skill> FindSkill(int id)
{
return await context.Skills.Include(a=>a.History)SingleOrDefaultAsync(a => a.SkillID == id);
}
但我的问题是,我是否可以使我的repo方法更通用,并向它传递一个导航属性列表(零或更多),以便在.Include()中使用?这里有两种实现方法
Include(字符串路径)
方法,该方法采用RyanCJI在注释中提到的字符串参数Include(Func fn)
public async Task<Skill> FindSkill(int id, string path)
{
return await context.Skills.Include(path).SingleOrDefaultAsync(a => a.SkillID == id);
}
public async Task<T2> FindSkill<T1>(int id, Func<T1,T2> fn)
{
return await context.Set<T1>.Include(fn).SingleOrDefaultAsync(a => a.SkillID == id);
}
公共异步任务FindSkill(int-id,字符串路径)
{
返回wait context.Skills.Include(path).SingleOrDefaultAsync(a=>a.SkillID==id);
}
2。解决方案
public async Task<Skill> FindSkill(int id, string path)
{
return await context.Skills.Include(path).SingleOrDefaultAsync(a => a.SkillID == id);
}
public async Task<T2> FindSkill<T1>(int id, Func<T1,T2> fn)
{
return await context.Set<T1>.Include(fn).SingleOrDefaultAsync(a => a.SkillID == id);
}
公共异步任务FindSkill(int-id,Func-fn)
{
返回wait context.Set.Include(fn.SingleOrDefaultAsync(a=>a.SkillID==id);
}
然后像这样称呼它
Task<Skill> tsk = staffRepository.FindSkill<History>(id, d => d.History)
Task tsk=staffRepository.FindSkill(id,d=>d.History)
坦率地说,我不确定第二种解决方案,因为我没有用
DbContext
尝试过,但我只想指出,您可能会朝着这个方向实现这一点。i、 e.通过传递Func Generic delegate。查看msdn文档…请参阅“定义查询路径以形成查询结果”一节