14

使用 .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.Data.Entity”类型的第一个参数的扩展方法“System”。可以找到 DbContext'(您是否缺少 using 指令或程序集引用?)

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

没有异常被捕获。

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

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

一些帮助将不胜感激。

附加信息:

_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'.这也被捕获为异常。

4

7 回答 7

1

我最近在一个小型示例应用程序中遇到了这个问题,我们只包含了 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 个工作。

只是想分享如果它有帮助。

于 2013-12-24T00:48:18.540 回答
1

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

于 2013-10-27T21:12:29.110 回答
1

尝试使用Visual Studio 命令提示符在全局程序集缓存中注册您的entity-frameworkdll 和dllsql-servergacutil.exe

于 2013-11-06T10:55:25.557 回答
1

这些看起来像是与您的项目的目标 .Net 版本和您所引用的程序集的构建版本之间的不兼容有关的问题。

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

于 2014-01-28T13:47:04.620 回答
1

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

希望这有帮助,祝你好运!!!!

于 2014-02-10T01:18:29.627 回答
1

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

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

于 2013-07-18T20:51:48.150 回答
0

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

于 2013-09-22T07:32:49.653 回答