实体框架4问题

本文关键字:问题 框架 实体 | 更新日期: 2023-09-27 18:23:44

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

假设在DocumentRepository中,我有一个构造函数:

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

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

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

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

没有发现任何异常

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

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

如果能提供一些帮助,我们将不胜感激。

附加信息:

以以下方式深入_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'.,这也是一个异常。

实体框架4问题

默认情况下,EF 4会动态生成从POCO类或模型优先类继承的代理类。这很可能就是您在运行时出现这些错误的原因。奇怪的是,所有必需的using都应该包括在内。

你确定你在你的POCO课程中参考了System吗(假设你有POCO课程)?

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

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

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

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

构建解决方案并在2012年重启后运行,效果良好。现在我不知道这些事情中的哪一个有助于解决这个问题,但在一个案例中,完成了所有4件事。

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

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

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

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

希望这能帮助。。。祝你好运

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