.NET Core EF Core DB First:泛型仓储调用时如何Include关联表?
解决EF Core泛型仓储Include关联数据的问题
首先,我注意到你调用GetAsync方法时参数顺序搞错了——第二个参数是用于排序的orderBy,而你试图在那里写Include逻辑,这不对。你的仓储方法的第三个参数才是可变长度的includes数组,用来传递需要预加载的导航属性表达式。
正确的调用方式
假设你的SiteDetails实体类中,对应Country表的导航属性名称是Country(EF Core数据库优先模式下,通常会根据外键CountryId自动生成这个单数形式的导航属性),你只需要把导航属性的表达式作为第三个参数传入即可:
var siteDetails= await this.siteDetailsRepository.GetAsync( x => x.siteNo == siteNo, null, // 如果不需要排序,这里传null x => x.Country // 预加载关联的Country数据 ).ConfigureAwait(false);
如果需要同时排序
要是你还想对查询结果排序,比如按siteName升序排列,就把排序逻辑放到第二个orderBy参数的位置:
var siteDetails= await this.siteDetailsRepository.GetAsync( x => x.siteNo == siteNo, query => query.OrderBy(s => s.siteName), // 按siteName升序排序 x => x.Country // 包含关联的Country数据 ).ConfigureAwait(false);
注意事项
- 请确认你的
SiteDetails实体确实存在名为Country的导航属性(如果反向工程生成的导航属性名称不同,比如CountryInfo,就替换成对应的名称)。 - 你的泛型仓储方法已经正确实现了遍历
includes数组并调用Include的逻辑,所以只要传入正确的导航属性表达式,就能自动预加载关联的Country数据。
内容的提问来源于stack exchange,提问作者Niranjan godbole
相关产品推荐
相关产品推荐

