我有一个使用 C#/WPF 和 SQL Server 和 EF Core 5 的程序。有时我使用预先加载,例如:
(from r in MyContext.Refractions where r.Id == id select r)
.Include(r => r.RightLens)
.ThenInclude(l => l.Prisms);
等等。这是一个光学数据数据库,因此有字段名称。 Refractions
链接到(眼睛)Examinations
。
当我想延迟加载时,我使用以下内容:
MyContext.Entry(patient)
.Collection(e => e.Examinations).Load();
我的问题是,当使用第二个惰性选项时,有没有办法也加载关联数据(相当于 .Include
方法的 Load
)?
例如,我想要相当于:
MyContext.Entry(patient)
.Collection(e => e.Examinations)
.Load().Include(r => r.Refractions);
或者我是否需要检测 Refractions
集合未在我的视图模型中的某处加载,然后在需要时手动加载?
答案 0 :(得分:1)
因为我认为这还不可能,你可以写一些这样的方法:
public IEagerLoadedQueryable<E, P> LoadRelated<E, P>(IQueryable<E> query, Expression<Func<E, P>> navProperty) where E : class {
var q= query.Include(navProperty);
return new EagerLoadedQueryable<E, P>(q);
}
public IEagerLoadedQueryable<E, Prop> ThenLoadRelated<E, Prev, Prop>(IEagerLoadedQueryable<E, IEnumerable<Prev>> query, Expression<Func<Prev, Prop>> navProperty) where E : class {
var q= (IIncludableQueryable<E, IEnumerable<Prev>>)query;
return new EagerLoadedQueryable<E, Prop>(q.ThenInclude(navProperty));
}
public IEagerLoadedQueryable<E, Prop> ThenLoadRelated<E, Prev, Prop>(IEagerLoadedQueryable<E, Prev> query, Expression<Func<Prev, Prop>> navProperty) where E : class {
var q= (IIncludableQueryable<E, Prev>)query;
return new EagerLoadedQueryable<E, Prop>(q.ThenInclude(navProperty));
}