ef-core-2.1 - 在尝试将 lambda 表达式传递到 Where 子句后,得到“尝试延迟加载分离实体上的导航属性”
问题描述
我正在使用启用延迟加载的 Entity Framework Core 2.1.2 并正在执行查询。如果我尝试传递 lambda 表达式,我总是会得到以下异常:
System.InvalidOperationException:为警告“Microsoft.EntityFrameworkCore.Infrastructure.DetachedLazyLoadingWarning”生成错误:尝试在“ParentProxy”类型的分离实体上延迟加载导航属性“Children”。分离实体或使用“AsNoTracking()”加载的实体不支持延迟加载。
这里有一些代码:
public class User
{
public virtual ICollection<UserRole> UserRoles { get; set; } = new HashSet<UserRole>();
}
public class UserRole
{
public int UserId { get; set; }
public int RoleId { get; set; }
public virtual User User { get; set; }
}
我的数据库上下文:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Context>(options =>
{
options.UseLazyLoadingProxies();
options.UseSqlServer(Configuration.GetConnectionString("connection"));
});
}
这就是它的工作原理:
_userRepository.Table.Where(user => user.UserRoles.Any(userRole => userRole.RoleId == 10)).ToList()
这就是它不这样做的原因:
_userRepository.Table.Where(user => condition(user)).ToList()
条件是:
Func<User, bool> condition
例子:
Func<User, bool> result = (user) => user.UserRoles.Any(role => role.RoleId == 10)
我很抱歉格式不好。但我希望你能理解我的问题。
解决方案
推荐阅读
- excel - Excel:按增量顺序自动填充单元格直到给定值
- arduino - 在 arduino 数据记录器脚本中打开 txt 文件时出错
- c++ - 如何修复以避免内存泄漏?
- angularjs - AngularJS 指令 - 使用具有不同值的相同指令
- google-sheets - Google 表格自定义数字格式 - Lakh 和 Crore 后缀
- html - 我使用哪个 HTML 标签来输入 bash 命令行?
- c++ - 模板化的类应该和非模板化的类一样快吗?
- javascript - 字符串不接受关闭标签
- javascript - 如何在 selenium 中更改 CSS(完整源代码)
- javascript - 如何通过单击使用 javascript 从图库中选择和取消选择图像