在MVC3 Razor视图中引用EntityFramework 4.1命名空间

3

我正在尝试在我的MVC3项目中的共享视图中引用System.Data.Entity.Validation(EF 4.1版本)命名空间。我已经能够使用以下方法引用其他外部库:

@using Example.Namespace

然而,当涉及到新的4.1 EntityFramework所包含的库时,我无法做到同样的事情。我尝试在Views文件夹中的web.config中添加以下内容:

<add namespace="System.Data.Entity.Validation, EntityFramework, Version=4.1.10715.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

我认为我在正确的轨道上,因为现在智能感知正在扩展其他以前工作的外部命名空间。有人可以帮助我确定这个Web.config条目应该是什么样子吗?
编辑:明确一下,我最终想在我的视图中使用DbEntityValidationException,据我所知,它是EntityFramework 4.1 DLL的一部分。我正在按照此帖子中的信息进行操作(https://dev59.com/XnA75IYBdhLWcg3wipqH部分(而不是项目的Web.config)。
我仍在努力解决这个问题,我发现将程序集添加到View的web.config文件的system.web/compilation/assemblies部分也“有效”,因为它会打破所有智能感知或者给我想要的命名空间的一部分。例如,我添加了:
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

这允许我在视图中输入System.Data.Entity,但此后在智能感知中没有任何内容。如果我将其更改为:

<add assembly="System.Data.Entity.Validation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

关闭并重新打开我的项目后,我的视图中的所有内容都无法使用智能感知,并出现以下错误:ASP.NET运行时错误:无法加载文件或程序集'System.Data.Entity.Validation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'或其某个依赖项。系统找不到指定的文件。

2个回答

3
好的,我通过试错找到了解决方法。
结果证明,您必须在根Web.config或View内的web.config中system.web/compilation/assemblies中具有以下条目:
<add assembly="EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

0

有趣的是,如果我这样做,它对我来说很好用:

@using System.Data.Entity

你确定在项目引用中引用了 EntityFramework 吗?

你的 Razor 视图中是否还有其他可能导致问题的内容?

我的 Web.config 中没有任何特殊设置,但我会将相关部分粘贴在下面:

<pages>
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages" />
  </namespaces>
</pages>

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  </assemblies>
</compilation>

如果您仍然卡住了,请至少发布您视图的前几行。

看一下...我编辑了我的问题。你在添加@using System.Data.Entity后能否在你的视图中使用System.Data.Entity.Validation成员? - DMC
顺便说一句,如果你使用的是Visual Studio,可以通过右键单击引用文件夹中的程序集并选择“在对象浏览器中查看”来轻松了解哪些类属于哪个命名空间。 - devuxer
抱歉,打错了。我知道这个错误是在System.Data.Entity.Validation中 - 我可以让Intellisense在我的代码的任何其他地方捕捉到这个类,除了Razor视图。 - DMC
你的环境中是否已安装了“Microsoft ADO.NET Entity Framework 4.1 - Update 1”?包括VS 2010和ASP.NET MVC3吗?如果这对你有效,那么我的环境必须有些不同。 - DMC
@DMC,这对我来说绝对有效——VS 2010,ASP.NET MVC 3,EF 4.1.10751.0。你能贴一份Razor视图的示例吗?也许你的Razor语法有问题? - devuxer
显示剩余4条评论

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