【发布时间】:2018-12-10 15:21:45
【问题描述】:
我有 Article 和 ArticleTranslation 表。
当我使用这个查询时,它不检索数据:
model.CategoryList = await db.ArticleCategoryTranslations
.Where(x => x.LangId == lang.Id &&
x.ArticleCategory.IsActive.Value == true &&
x.ArticleCategory.IsDelete.Value == false)
.Select(x => new ddl { Id = x.RecordId.Value, Name = x.Title }).ToListAsync();
但是当我使用它时,它可以工作,告诉我第一个代码中有什么问题
model.CategoryList = await db.ArticleCategoryTranslations
.Where(x => x.LangId == lang.Id &&
db.ArticleCategorys.Where(u => u.Id == x.RecordId).FirstOrDefault().IsActive == true &&
db.ArticleCategorys.Where(u => u.Id == x.RecordId).FirstOrDefault().IsDelete == false
)
.Select(x => new ddl { Id = x.RecordId.Value, Name = x.Title }).ToListAsync();
【问题讨论】:
-
ArticleCategory是否延迟加载?您是否将此导航属性标记为virtual,所以延迟加载确实有效? -
您是否正确设置了关系?在数据库和你的模型中?
-
这是两个非常不同的查询。第一个似乎是查看与 ArticleCategoryTranslations 关联的 ArticleCategory 的单个实例。第二个似乎正在查看您的整个 ArticleCategorys 查找表 - 可能不是您想要的。您需要展示所涉及的模型并确保有实际匹配的数据。记录你的 SQL 可以帮助解决这个问题。
-
RecordId是ArticleCategoryTranslations中ArticleCategory的 FK 吗?对于第一个查询,它通过 FK 在ArticleCategoryTranslations和ArticleCategory之间检查IsActive和IsDelete。对于第二个查询,它通过u => u.Id == x.RecordId检查它们。与我们分享这两种模型的定义。
标签: entity-framework entity-framework-6 asp.net-core-mvc