实体框架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'.
,这也是一个异常。
默认情况下,EF 4会动态生成从POCO类或模型优先类继承的代理类。这很可能就是您在运行时出现这些错误的原因。奇怪的是,所有必需的using都应该包括在内。
你确定你在你的POCO课程中参考了System吗(假设你有POCO课程)?
您的解决方案中的所有项目在项目属性中都有相同的.NET版本设置吗?这些版本与MSDN上描述缺失类的版本一致吗?
尝试使用visual studio命令提示符中的gacutil.exe
在全局程序集缓存中注册entity-framework
dll和sql-server
dll
我最近在一个小示例应用程序中遇到了这个问题,我们刚刚在该应用程序中包含了nuget包并创建了一些数据层对象。这就是我们所做的,它解决了的问题
- 确保.net的临时文件夹是干净的。通常在windows目录下的asp.net临时文件中
- 请确保您的visual studio是最新的,并且不需要重新安装。不确定它是否解决了问题或确实有帮助,但我也检查了一下,并重新启动了vs
- 清理项目并确保存在dll。如果您正在使用一些webmatrix dll作为asp.net简单成员身份,请确保您已选择在本地复制它。当我们为mvc4简单成员身份使用的角色和成员播种数据时,这是一个问题,但您的项目可能不是这样
- 我们还检查了在web项目中,ef的配置是否与ef的正确版本相对应
构建解决方案并在2012年重启后运行,效果良好。现在我不知道这些事情中的哪一个有助于解决这个问题,但在一个案例中,完成了所有4件事。
只是想分享一下,如果有帮助的话。
这些看起来像是与项目的目标.Net版本和您引用的程序集的构建版本之间的不兼容有关的问题。
在这种情况下,应确保引用的程序集小于或等于项目的目标.Net Framework版本。
我已经多次看到此消息。十有八九,这意味着App.config文件可能存在问题。通常,它只是不见了。换言之,对于引用实体模型的每个项目文件夹,您都需要在其中放置该App.config文件的副本。如果它们已经存在,则删除与edmx文件合作的App.config文件,并单独重新编译实体模型以重新生成它。(不要删除edmx文件或DESIGNER类)然后您必须再次替换所有的App.config。是的,太糟糕了!!!有时,LinqPad也非常适合检查这个问题。您可以在LinqPad中引用dll文件,并尝试运行查询,得到相同的错误消息,让您知道问题不仅仅是Visual Studio。
希望这能帮助。。。祝你好运
您是如何实现存储库的?在我看来,问题可能是您的应用程序运行在与存储库不同的线程上,这可能是"评估的函数需要运行所有线程"消息的答案。