实体框架4问题

时间:2013-07-18 15:34:47

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

使用.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'接受'System.Collections类型的第一个参数。 Generic.Dictionary

没有异常被捕获。

如果我在存储库方法中将此行放置一个断点 - 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) - >内部背景 - > _appConfig - >最后默认连接工厂旁边有以下错误“评估的函数需要运行所有线程。”

根据我的评论提供更多信息:

这与这个问题没有关系,但是我认为我安装.NET或VS可能有问题 - 我不太了解打电话的管道,也许你们其中一个能够。无论如何,我可以浏览到我的WebAPI项目中的URI并在浏览器中返回JSON。当我尝试在我的网站项目中使用URI时,我在浏览器中得到了这个:Could not find file 'C:\Program Files (x86)\IIS Express\System.Net.Http.StreamContent'.这也是一个例外。

7 个答案:

答案 0 :(得分:1)

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

您确定在POCO课程中引用了System(假设您有POCO课程)吗?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

  1. 确保.net的临时文件夹是干净的。通常在windows目录中的asp.net临时文件中。
  2. 确保您的visual studio是最新的,并且由于重新安装nuget而不需要重新启动。不确定它是否已解决或帮助,但我也检查了这一点并重新启动vs。
  3. 清理项目并确保存在dll。如果你使用一些webmatrix dll for asp.net简单会员资格,请确保你选择在本地复制它。当我们为mvc4简单会员使用的角色和成员播种数据时,这是一个问题,但可能不是您的项目的情况。
  4. 我们还检查了在web项目中,ef的配置对应于ef的正确版本。
  5. 构建解决方案并在vs 2012重启后运行它并且运行正常。现在我不确切地知道这些问题中的哪一个有助于解决这个问题,但在一个案例中完成所有4个工作。

    只是想分享它是否有帮助。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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