代码之家  ›  专栏  ›  技术社区  ›  asfsadf

在存储库中使用实体框架4的ASP.NET MVC2-AsEnumerable()还是ToList()?

  •  15
  • asfsadf  · 技术社区  · 15 年前

    因此,有人建议我在使用上述框架构建应用程序时禁用延迟加载,tolist()将强制执行存储库中的查询。有人告诉我,如果我使用AsEnumeratable(),我将避免遇到某些“陷阱”。

    然而,在最近的一个问题上,我在我的代码示例中包含了一系列tolist()s,并震惊了许多人,他们向我保证IEnumerable更好地返回。

    至少可以说,我现在完全困惑了。

    我应该在存储库中返回IEnumerable,然后将其转换为视图模型中的列表吗?我应该像以前一样直接在存储库中使用tolist()吗?我是不是应该首先启用延迟执行?

    吉米圣诞…

    编辑: 因此,既然我根据先前的建议禁用了延迟加载,那么我应该重新启用它,从我的存储库返回IEnumerable/IQueryable,并在需要时将集合转换为视图模型中的列表吗?

    下面的一个答案将IEnumerable与渴望执行相关联,而我认为只有tolist()会强制立即执行查询。

    我偶然发现 this , this this 所有这些都包含一些与这个问题相关的有趣的讨论。

    1 回复  |  直到 15 年前
        1
  •  16
  •   Robert Harvey    15 年前

    呼叫 ToList() 返回一个 IEnumerable 在您的存储库中,如果:

    1. 您希望控制提供给使用者的输出集(即,您不希望他们对其运行查询),以及
    2. 你不介意急着处决。

    返回 IQueryable 可枚举的 通过 AsEnumerable() ,如果:

    1. 您不介意您的消费者在输出集上运行查询,并且
    2. 你想要延期执行。

    也见
    http://thinkbeforecoding.com/post/2009/01/19/Repositories-and-IQueryable-the-paging-case

    推荐文章