我有以下存储库方法: -
public async Task<Skill> FindSkill(int id)
{
return await context.Skills.Include(a=>a.History)SingleOrDefaultAsync(a => a.SkillID == id);
}
,其名称如下: -
var staff = await staffRepository.FindStaff(id);
但我的问题是,如果我可以使我的repo方法更通用,并将一个导航属性列表(零或更多)传递给.Include()?
答案 0 :(得分:0)
在这里你可以有两种方法来实现。
Include(string path)
方法,它接受RyanCJI评论中提到的字符串参数。Include(Func<T1, T2> fn)
委托人的Func<T1, T2>
。以下是两者的外观。
<强> 1。溶液强>
public async Task<Skill> FindSkill(int id, string path)
{
return await context.Skills.Include(path).SingleOrDefaultAsync(a => a.SkillID == id);
}
<强> 2。溶液强>
public async Task<T2> FindSkill<T1>(int id, Func<T1,T2> fn)
{
return await context.Set<T1>.Include(fn).SingleOrDefaultAsync(a => a.SkillID == id);
}
然后这样称呼它。
Task<Skill> tsk = staffRepository.FindSkill<History>(id, d => d.History)
坦率地说,我不确定第二个解决方案,因为我没有尝试使用DbContext
,但我只是想指出你可以朝这个方向实现这个目标。即通过传递Func Generic代表。