【问题标题】:LINQ Code-First Select Using Composite Foreign Key使用复合外键的 LINQ 代码优先选择
【发布时间】:2013-08-17 18:53:18
【问题描述】:

我正在尝试基于一个实体与另一个实体作为外键关系执行选择。

我在测试中恢复了对象,它们是正确的对象,但由于某种原因,我在 Asserts 中遇到了失败。有时会加载相关的实体,有时则不会。

LINQ 代码如下所示:

var toDoList = _dbSet.Where(s => Context.ToDos.Where(std => std.UserId == userId && std.Id == s.Id).Any()).AsEnumerable();

ToDo 列表包含我从 _dbSet 中选择的实体的 ID。我想知道这是否与延迟加载或我的 LINQ 问题有关。我怎样才能可靠地加载相关实体?

【问题讨论】:

  • 我对保留对 dbset 作为类成员的引用持怀疑态度。为什么需要这样做?为什么不直接参考您的上下文来获取它?
  • 可能相关:AsEnumerable 不会像 ToList 或 ToArray 那样执行查询 - 它只是将其转换为 IEnumerable 但执行会延迟到迭代为止。
  • 是的,我一发布这个并修改了我的代码就意识到了这一点。我现在立即调用 AutoMapper,以便在该过程中初始化所有属性。

标签: c# linq entity-framework ef-code-first


【解决方案1】:

您可以使用 Include 快速加载相关实体。

_dbSet.ToDos.Where(std => ...).Include(std => std.NavigationProperty)
    .AsEnumerable();

您可以查看这篇msdn 文章了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2012-01-13
    相关资源
    最近更新 更多