小编Tra*_*ell的帖子

EF Core:在相关的一对多实体中深入查询数据的正确方法

当必须基于多个联接(包括通过联结表进行多对多)获取数据时,我正在尝试学习编写高效的实体框架查询。在下面的示例中,我想获取包含特定书籍的所有州。

让我们使用具有以下表/实体的模型,所有表/实体均通过导航属性链接:State、City、Library、Book、LibraryBook(图书馆和书籍之间多对多关系的联结表。)

  • 每个州有 1 个或多个城市
  • 每个城市有 1 个或多个图书馆
  • 每个图书馆都有很多书,每本书可能存在于多个图书馆。

如何最好地返回包含特定书籍的所有状态?我倾向于认为单独的查询可能比 1 个大型查询更好,但我不确定最好的实现是什么。我认为首先在单独的查询中从多对多关系获取 LibraryId 可能是一个很好的开始方法。

为此:

var bookId = 12;
var libraryIds = _context.LibraryBook.Where(l => l.BookId == bookId).Select(s => s.LibraryId);
Run Code Online (Sandbox Code Playgroud)

如果这是首先发生的,我不确定如何最好地查询下一个数据,以便获取包含每个 LibraryId 的城市。我可以使用 foreach:

var cities = new List<City>;
foreach(var libraryId in libraryIds)
{
    var city = _context.City.Where(c => c.Library = libraryId)
    cities.Add(city);
}
Run Code Online (Sandbox Code Playgroud)

但随后我必须对包含该城市的州执行另一个foreach,这一切加起来会产生大量单独的 SQL 查询!

这真的是解决这个问题的唯一方法吗?如果没有,什么是更好的选择?

提前致谢!

.net c# linq entity-framework entity-framework-core

1
推荐指数
1
解决办法
3908
查看次数

标签 统计

.net ×1

c# ×1

entity-framework ×1

entity-framework-core ×1

linq ×1