【问题标题】:Entity Framework 4 issue实体框架 4 问题
【发布时间】:2013-07-17 15:57:32
【问题描述】:

使用 .NET Web API(.NET 4、EF 4),我在调试时遇到了一些奇怪的错误,真的不知道发生了什么。

说在DocumentRepository我有这个构造函数:

public DocumentRepository(DocPortalContext db)
{
    this._db = db;
}

如果我调试并将鼠标悬停在 _db 上并深入了解弹出窗口中的项目,我会遇到以下错误:

System.Data.Entity.Infrastructure.IObjectContextAdapter.ObjectContext = 'System.Data.Entity.DbContext' 不包含 'System' 的定义,并且没有扩展方法 'System' 接受类型为 'System.Data 的第一个参数.Entity.DbContext' 可以找到(您是否缺少 using 指令或程序集引用?)

System.Collections.Generic.ICollection>.IsReadOnly = 'System.Collections.Generic.Dictionary' 不包含“System”的定义,也没有接受“System.Collections”类型的第一个参数的扩展方法“System”。通用字典

没有发现异常。

如果我在存储库方法中的这一行上放置一个断点 - return _db.Documents.AsQueryable(); - 并将鼠标悬停在 Document 上,我会收到以下错误:

System.Linq.IQueryable.Provider = 'System.Data.Entity.Infrastructure.DbQuery' 不包含“System”的定义,并且没有扩展方法“System”接受“System.Data.Entity”类型的第一个参数.Infrastructure.DbQuery' 可能是 f...

我们将不胜感激。

其他信息:

以下列方式钻入_db 会在末尾给出引用的消息:

base(System.Data.Entity.DbContext) -> Internal Context -> _appConfig -> 最后默认连接工厂旁边有以下错误“评估的函数需要所有线程运行。”

根据我的评论了解更多信息:

这实际上与问题无关,但它让我认为我的 .NET 或 VS 安装可能有问题 - 我对进行该调用的管道了解不足,也许你们中的一个能够。无论如何,我可以浏览到我的 WebAPI 项目中的 URI 并在浏览器中返回 JSON。当我尝试在我的网站项目中使用 URI 时,我在浏览器中得到了这个:Could not find file 'C:\Program Files (x86)\IIS Express\System.Net.Http.StreamContent'.,这也被捕获为异常。

【问题讨论】:

  • 你在类的标题中有using System.Linq吗?
  • 是的,它正在被引用。
  • 是的,这很奇怪,因为这些看起来像是编译器错误,而不是运行时错误。尝试进行清理并重建。也许 pdb 和您的代码之间出现问题,导致调试期间出现问题。
  • 刚刚进行了清理和重建,调试时出现了同样的错误。
  • 'System.Data.Entity.DbContext' 不包含 'System' 的定义

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 asp.net-web-api


【解决方案1】:

默认情况下,EF 4 会动态生成代理类,这些代理类继承自您的 POCO 类或模型的第一类。这很可能是您在运行时收到这些错误的原因。奇怪的是,所有必需的使用都应该包括在内。

你确定你在你的 POCO 类中引用了 System(假设你有 POCO 类)?

【讨论】:

  • 有一个现有的数据库,我正在根据这些表编写 POCO,目前只有一个。我几乎可以肯定 System 正在被引用。在我工作之前,我不能完全确定。这一切最初都是有效的,我有一个通用存储库,我把它拿出来,这就是问题开始的时候。
  • 是的,这很可能是因为否则很多事情都无法正常工作。还要确保在使用类的任何地方都安装了 EF NuGet 包。只是要确定。这就是我现在能想到的:-)。
【解决方案2】:

您的解决方案中的所有项目是否在项目属性中都具有相同的 .NET 版本设置? 这些版本是否与 MSDN 上描述缺失类的版本一致?

【讨论】:

    【解决方案3】:

    尝试在 Visual Studio 命令提示符下使用 gacutil.exe 在全局程序集缓存中注册您的 entity-framework dll 和 sql-server dll

    【讨论】:

      【解决方案4】:

      我最近在一个小型示例应用程序中遇到了这个问题,我们刚刚包含了 nuget 包并创建了一些数据层对象。这就是我们所做的,它解决了问题

      1. 确保 .net 的临时文件夹是干净的。通常在 windows 目录下的 asp.net 临时文件中。
      2. 确保您的 Visual Studio 是最新的,并且不需要因为 nuget 重新安装而重新启动。不确定它是否已解决或有帮助,但我也检查了这一点并重新启动 vs.
      3. 清理项目并确保 dll 存在。如果您使用一些 webmatrix dll 作为 asp.net 简单成员,请确保您已选择将其复制到本地。当我们为角色和成员播种数据以供 mvc4 简单成员使用时,这是一个问题,但您的项目可能并非如此。
      4. 我们还检查了 Web 项目中 ef 的配置是否对应于正确版本的 ef。

      构建解决方案并在 vs 2012 重新启动后运行它,它工作正常。现在我不知道这些事情中的哪一个有助于解决这个问题,但是在一个案例中完成所有 4 个工作。

      只是想分享一下,如果有帮助。

      【讨论】:

        【解决方案5】:

        这些问题似乎与您项目的目标 .Net 版本与您所引用的程序集的构建版本之间的不兼容有关。

        在这种情况下,您应该确保您引用的程序集小于或等于您项目的目标 .Net Framework 版本。

        【讨论】:

          【解决方案6】:

          我已多次看到此消息。十分之九,这意味着 App.config 文件可能存在问题。通常,它只是丢失了。换句话说,对于您引用实体模型的每个项目文件夹,您需要在其中放置该 App.config 文件的副本。如果它们已经存在,则删除与 edmx 文件合作的 App.config 文件,并单独重新编译实体模型以重新生成它。 (不要删除 EDMX 文件或 DESIGNER 类)然后您必须再次替换所有 App.config。是的,很烂!!!有时,LinqPad 也非常适合检查此问题。您可以在 LinqPad 中引用该 dll 文件并尝试运行查询,从而为您提供相同的错误消息,让您知道问题不仅仅是 Visual Studio。

          希望这会有所帮助...祝你好运!!!!

          【讨论】:

            【解决方案7】:

            您是如何实现您的存储库的?在我看来,问题可能在于您的应用程序运行在与存储库不同的线程上,这可能是“评估的函数需要所有线程都运行”的答案。消息。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-08-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多