解决方案中的项目
我有一个针对 .NET 4.5 并使用 Entity Framework 6 Alpha 3 的典型 3 层解决方案。该解决方案由三个项目组成,我们称之为:
- 实体- 包含 EF 模型和实体定义的类库
- DataAccess - 充当 UI 和数据库之间的“业务层”的类库
- WinformsClient - Winforms 客户端应用程序
参考
WinformsClient 项目包含大量外部引用,包括对 CrystalReports DLL、其他“公司范围”程序集的引用等。
在我的 WinformsClient 中,我引用了我的 DataAccess 库。两者都使用实体库。
触发问题
在 WindowsClient 中,我调用了 DataAccess 库上的一个方法,我们称之为GetData
. 在此方法中,DbContext
创建了 a,执行了一些 LINQ 魔术并IEnumerable<T>
返回了 an。
问题
现在,当我第一次调用此方法时,在调用第一个 LINQ 扩展方法时会加载许多外部程序集。这包括需要很长时间才能加载的 CrystalReports DLL。但是这些程序集都不是实体或数据访问库实际引用的,也不是执行或显示数据所必需的。
事实上,当我创建一个引用 DataAccess 和实体库的单独控制台应用程序时,我可以GetData
很好地调用并获取我的实体列表,并且不会加载任何外部库。
我怀疑 Entity Framework / LINQ to Entities 与此有关,因为当我只是从 DataAccess 库(不加载 EF)返回 POCO 列表时,没有加载任何外部引用。
谁能解释这种行为?
更新
此问题可能与此问题密切相关,其中 Entity Framework 尝试加载从项目中引用的所有程序集。任何帮助我理解为什么会发生这种情况/如何影响这种情况的建议仍然受欢迎!