c# - EF Core:Include 中使用的 Lambda 表达式无效
问题描述
我试图让我所有的活动Products
(GetByCategory
),包括所有活动ProductSpecifications
,但没有成功。
如果我执行注释块,我会得到异常
System.InvalidOperationException:在 Include 中使用的 Lambda 表达式无效
我的解决方案是让所有活动,然后使用该方法Products
加载所有活动ProductSpecifications
LoadAllActiveSpecifications(products)
使用的问题LoadAllActiveSpecifications
是我需要运行一个 for 循环来加载所有规范。
是否可以ProductSpecification
隐式加载所有活动?
这是我的代码。有人可以告诉我我错过了什么吗?
public async Task<IEnumerable<Product>> GetByCategory(string code)
{
/*
// Following the example from Microsoft: https://docs.microsoft.com/en-us/ef/core/querying/related-data
return await _context
.Products
.Include(p => p.Category)
.Include(product => product
.Specifications
.Where(specification => specification.IsActive))
.Where(product => product.IsActive)
.Where(p => p.Category.Code == code)
.ToListAsync();
*/
var products = await _context
.Products
.Include(p => p.Category)
//.Include(p => p.Specifications)
.Where(p => p.IsActive)
.Where(p => p.Category.Code == code)
.ToListAsync();
await LoadAllActiveSpecifications(products);
return products;
}
private async Task LoadAllActiveSpecifications(List<Product> products)
{
for (int index = 0; index < products.Count; index++)
{
var product = products[index];
await LoadSpecActiveAsync(product);
}
}
private async Task LoadSpecActiveAsync(Product product)
{
await _context
.Entry(product)
.Collection(p => p.Specifications)
.Query()
.Where(s => s.IsActive)
.LoadAsync();
}
提前致谢
干杯
解决方案
根据定义,EF 将加载完整的实体图。您可以在 EF Core ( https://docs.microsoft.com/en-us/ef/core/querying/filters )中分配全局查询过滤器来处理诸如软删除之类的规则,这将允许 EF 仅返回“活动”适用实体的行。EF6 在动态查询中有类似的东西。
推荐阅读
- java - Java Spring 多个 url 映射值
- sql - 如何引用确切的对象
- javascript - 反应形式模式 IE11
- elasticsearch - ElasticSearch Painless:在 for 循环中使用向量函数错误
- wordpress - Elementor Post Widget - 从另一个(多站点)博客 ID 获取帖子
- database-design - 医疗库存管理数据库(MLD)的设计
- flutter - 如何在具有空安全性的颤动中创建构造函数
- javascript - jQuery 使用数据中的元素创建 div
- python - JSON 和 Heroku 的问题
- signalr-hub - 多租户应用程序中的 SignalR - 包装 IHubContext<>