
[英].Net Core Entity Framework .Include Eager load does not load entity
[英]Entity Framework Core Repository Pattern Eager Load
我正在尝试使用存储库模式构建 web 应用程序。 在这样做时,我注意到我的导航属性没有加载。 我能够使用 EF 代理加载我的属性,但是当我使用我的 DTO 时,它真的不喜欢那样。 此后,我删除了所有 Proxy 代码,并决定只需要提供一种方法来 Eager Load 我关心的数据。
在我的存储库中,我有一个类似的界面。 使用 DBSet,我可以使用 Find 方法一般地查找值并从 repo 中返回它。 这样做,我无法传入 Includes 来解析导航属性。
public async Task<T> GetById(int Id)
{
var query = await this.Context.Set<T>().FindAsync(Id);
// Left split like this for clarity
return query;
}
我得到这个工作的唯一方法是删除通用部分并将一个名为 GetUserById 的新方法添加到 UserRepository 中。
public class UserRepository : RepositoryBase<User>, IUserRepository
{
private readonly Context _context;
public UserRepository(Context context) : base(context) {
_context = context;
}
public User GetUserById(int Id)
{
var query = _context.Users.Include("Department").Where(x => x.Id == Id).FirstOrDefault();
return query;
}
}
请告诉我有更好的方法。
试试这个GetUserById
实现:
public User GetUserById(int Id, params Expression<Func<User, object>>[] includes)
{
var query = _context.Users.Where(x => x.Id == Id);
foreach (var include in includes)
{
query.Include(include);
}
return query.FirstOrDefault();
}
这就是你所说的:
var repo = new UserRepository();
var user = repo.GetUserById(100, u => u.Department);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.