3

解决方案中的项目

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

  1. 实体- 包含 EF 模型和实体定义的类库
  2. DataAccess - 充当 UI 和数据库之间的“业务层”的类库
  3. 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 尝试加载从项目中引用的所有程序集。任何帮助我理解为什么会发生这种情况/如何影响这种情况的建议仍然受欢迎!

4

1 回答 1

0

问题不在于实体或数据访问层,显然,问题在于您的 WinformsClient。我的建议是您在调用该方法的行设置断点GetData,这显然在您的 WinformsClient 项目中。

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

于 2013-04-12T16:42:05.647 回答