Entity Framework 6 将存储过程添加到数据模型后无法构建

Posted

技术标签:

【中文标题】Entity Framework 6 将存储过程添加到数据模型后无法构建【英文标题】:Entity Framework 6 Cannot build after adding stored procedures to data model 【发布时间】:2013-11-08 19:13:47 【问题描述】:

我刚刚下载了实体框架 6 并创建了一个全新的项目来测试它。我们目前使用的是 EF 5。

添加所有表和存储过程后,我尝试构建项目但出现错误:

“System.Data.Objects.ObjectParameter”类型的值不能 转换为“System.Data.Entity.Core.Objects.ObjectParameter”。

'System.Data.Entity.Core.Objects.ObjectResult(Of DataLibrary.MyStoredProc_Result)' 无法转换为 'System.Data.Objects.ObjectResult(的 DataLibrary.MyStoredProc_Result)'。

我不明白为什么这不能开箱即用

EF 5 就有这样的问题。

我正在使用 VS 2012。.Net 4.5 Vb.net(也尝试使用 C# 项目...同样的问题)

有什么想法吗?

编辑

答案是为 VS 2012 安装 EF6 工具。我不知道我必须这样做,因为我认为在添加实体框架包时已安装。

【问题讨论】:

IMO,它应该与 EF6 包一起安装。 是的,你是对的。您必须安装 EF 6.0 工具并卸载旧版本。 这里也一样,EF5没有这个问题。首先出现在 EF6 中。 【参考方案1】:

您可以通过替换来克服这种情况:

using System.Data.Objects;

与:

using System.Data.Entity.Core.Objects;

您可能需要更新 T4 模板中的 using 语句,例如 Context.tt 文件,以便自动生成的文件在重新生成时继续工作。

之前

之后

【讨论】:

哇,这对我也有效。让我头疼不已!这个错误对我来说起源于 VS2013,新项目。 2012 年从未碰过它。 为我工作,我不必为 VS2012 安装 EF 工具,只需进行上述更改 我假设这是在MyContext.Context.cs 文件中完成的。此文件是自动生成的,因此如果重新生成代码,手动更改将被覆盖.. @Doomsknight 更新 T4 模板中的 using 语句,例如 Context.tt 文件,以便重新生成继续工作。【参考方案2】:

我猜你正在使用 VS2012 中的 EF 工具,它们仍然绑定到原始 EF 发行版(.NET 框架的一部分)。 EF6 使用带外分发,它不适用于以前的工具 - 这就是为什么这些类型的命名空间略有不同并且无法从一种转换到另一种的原因。

解决方案应该是下载并安装EF6 tools for VS2012 或使用应包含工具的VS2013。

【讨论】:

我还需要更改以下答案中的引用。 我有 VS 2012 Update 4 并且我已经从上面的链接安装了 EF 6 工具,但它仍然引用了错误的命名空间...好的,现在我可以在我的 .tt 文件中更新命名空间,但生成的方法需要一个 ObjectResult 数组,而不是 ObjectResult 的对象。【参考方案3】:

我使用了对我有用的“Pauly Glott”。有关更详细的信息,请参阅我在 Microsoft 论坛中的帖子和答案。

http://social.msdn.microsoft.com/Forums/en-US/9ac881f5-18f5-4aa4-bd99-94b1fa4c37c2/why-i-am-getting-errors-like-value-of-type-systemdataobjectsobjectparameter-cannot-be?forum=adodotnetentityframework

【讨论】:

以上是关于Entity Framework 6 将存储过程添加到数据模型后无法构建的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 6 中具有多个记录集的存储过程

Entity Framework 6 Recipes 2nd Edition(10-10)译 - > 为TPH继承的插入更新删除操作映射到存储过程

Entity Framework 6 Recipes 2nd Edition(10-9)译 -> 在多对多关系中为插入和删除使用存储过程

《Entity Framework 6 Recipes》中文翻译系列 (14) -----第三章 查询之查询中设置默认值和存储过程返回多结果集 (转)

在entity framework中怎么调用存储过程

如何在 Entity Framework Core 中运行存储过程?