c# - 这是如何运作的? LINQ to Entities 触发程序集加载?

标签 c# .net linq entity-framework linq-to-entities

解决方案中的项目

我有一个典型的 3 层解决方案,它以 .NET 4.5 为目标并使用 Entity Framework 6 Alpha 3。该解决方案由三个项目组成,我们称它们为:

  1. 实体 - 包含 EF 模型和实体定义的类库
  2. DataAccess - 充当 UI 和数据库之间“业务层”的类库
  3. WinformsClient - Winforms 客户端应用程序

引用资料

WinformsClient 项目包含大量外部引用,包括对 CrystalReports DLL、其他“公司范围”程序集等的引用。

在我的 WinformsClient 中,我引用了我的 DataAccess 库。两者都使用实体库。

触发问题

在 WindowsClient 中,我调用了 DataAccess 库上的一个方法,我们称它为 GetData .在这个方法中,一个 DbContext被创建,一些 LINQ 魔术被执行并且一个 IEnumerable<T>被退回。

问题

现在,一旦我第一次调用此方法,就会在调用第一个 LINQ 扩展方法时加载大量外部程序集。这包括需要很长时间才能加载的 CrystalReports DLL。 但这些程序集实际上都没有被 EntitiesDataAccess 库引用,也没有一个是执行或显示数据所必需的。

事实上,当我创建一个引用 DataAccess 和 Entities 库的单独控制台应用程序时,我可以调用 GetData并获得我的实体列表就好了,并且没有加载任何外部库。

我怀疑 Entity Framework/LINQ to Entities 与此有关,因为当我只是从 DataAccess 库返回 POCO 的列表(不加载 EF)时,没有加载任何外部引用。

谁能解释这种行为?

更新

这个问题可能与this question密切相关,其中 Entity Framework 尝试加载从项目引用的所有程序集。仍然欢迎任何有助于我理解为什么会发生这种情况/如何影响这种情况的建议!

最佳答案

问题不在 Entities 或 DataAccess 层上,显然,问题出在您的 WinformsClient 上。我的建议是在调用 GetData 方法的那一行设置一个断点,这显然在您的 WinformsClient 项目中。

从那里进入 GetData 方法并检查您的调用堆栈,也许您会在那里找到违规者。似乎调用 GetData 的方法正在被您的 WinformsClient 应用程序中的某些东西监视。 (obs:评论太长了)

关于c# - 这是如何运作的? LINQ to Entities 触发程序集加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15974203/

相关文章:

c# - 来自 wcf 数据服务的 Entity Framework 6 数据上下文

c# - 获取所选列表框项目的对象信息

c# - 具有主机级别信任的 LINQ 反射

.net - 寻找一个简单的.Net、3D绘图API(装配)

c# - 在 .NET 中将整个数据库从一台服务器复制到另一台服务器

c# - LINQ to Entities 无法识别方法 'System.String StringConvert(System.Nullable` 1[System.Double])

c# - 返回新的 LINQ 对象

c# - 为什么c#不支持以接口(interface)为参数的对象?

c# - "e.Cancel "在关闭事件中

c# - 动态创建 lambda 表达式 + linq + OrderByDescending