Entity Framework 6 在向数据模型中添加存储过程后无法构建

43

我刚下载了Entity Framework 6并创建了一个全新的项目来进行测试。我们目前使用EF5。

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

'System.Data.Objects.ObjectParameter'类型的值无法转换为'System.Data.Entity.Core.Objects.ObjectParameter'。

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

我无法弄清楚为什么这个开箱即用的功能无法工作。

EF5没有这样的问题。

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

有任何想法吗?

编辑

答案是安装VS 2012的EF6工具。我不知道我必须这样做,因为我认为当我添加Entity Framework包时已经安装了它。


2
在我看来,它应该与EF6包一起安装。 - AJ.
是的,你说得对。你需要安装EF 6.0工具并卸载旧版本。 - user3163625
这里也是一样的情况,EF5没有这个问题。这个问题首次出现在EF6中。 - Veverke
3个回答

99
您可以通过替换以下内容来解决这种情况:
using System.Data.Objects;

随着:

using System.Data.Entity.Core.Objects;

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

1
哇,这对我也起作用了。省去了我大麻烦!这个错误是在VS2013中出现的,是一个新项目。2012从未碰过它。 - Shawn J. Molloy
2
对我来说起作用了,我不需要安装 VS2012 的 EF 工具,只需进行上述更改即可。 - connectedsoftware
4
我猜这是在 MyContext.Context.cs 文件中完成的。这个文件是自动生成的,所以如果代码重新生成,手动更改将被覆盖。 - IAmGroot
13
@Doomsknight 请更新您的 T4 模板中的 using 语句,例如您的 Context.tt 文件,以便重新生成工作正常进行。 - Chris Schiffhauer

38

我猜你正在使用VS2012中的EF工具,它们仍然与原始的EF发行版(.NET Framework的一部分)绑定。EF6使用独立的发行版,不能与先前的工具配合使用-这就是为什么那些类型具有略微不同的命名空间且无法相互转换的原因。

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


1
我也需要像下面的答案一样更改引用。 - ekenman
我有VS 2012 Update 4,并从上面的链接安装了EF 6工具,但它仍然引用错误的命名空间... 好的,现在我可以在我的.tt文件中更新命名空间,但生成的方法期望一个ObjectResult数组而不是一个ObjectResult对象。 - Legends

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接