【问题标题】:Referencing EntityFramework 4.1 namespace in MVC3 Razor View在 MVC3 Razor 视图中引用 EntityFramework 4.1 命名空间
【发布时间】:2011-09-20 21:57:59
【问题描述】:

我正在尝试在我的 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 的一部分。我正在关注这篇文章(http://stackoverflow.com/questions/3239006/how-to-import-a-namespace-in-razor-view-page)中的信息,这似乎表明我需要将命名空间声明添加到视图中的 web.config 文件部分(不是项目 WEB.CONFIG)。

我仍在处理这个问题,我发现将程序集添加到视图的 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' 或其依赖项之一。系统找不到指定的文件。

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework razor ef-code-first


    【解决方案1】:

    好的,通过反复试验弄明白了。

    事实证明,您的根 web.config 或 system.web/compilation/assemblies 内的 View 的 web.config 中必须有以下条目:

    <add assembly="EntityFramework, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    

    【讨论】:

      【解决方案2】:

      有趣,如果我这样做对我来说效果很好:

      @using System.Data.Entity
      

      您确定在您的项目引用中引用了EntityFramework

      在您的剃刀视图中是否还有其他原因导致了问题?

      我的 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 成员?
      • 我认为您的命名空间有误。实际上是System.Data.Entity.ValidationDbEntityValidationException 而不是System.Data.Entity。所以,@using System.Data.Entity.Validation 应该可以解决问题。一旦我把 then 放在我的测试页面中,Intellisense 让我做throw new DbEntityValidationException()
      • 顺便说一句,如果您使用的是 Visual Studio,您可以通过右键单击 References 文件夹中的程序集并选择“在对象浏览器中查看”来轻松找出哪些类位于哪个命名空间中。跨度>
      • 对不起,错字。我知道它在 System.Data.Entity.Validation 中 - 除了我的 Razor 视图之外,我可以让智能感知在我的代码中的其他任何地方拾取这个类。
      • 您的环境中是否安装了“Microsoft ADO.NET Entity Framework 4.1 - Update 1”? VS 2010 与 ASP.NET MVC3?如果这对你有用,那么我的环境一定有一些不同。
      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2012-01-08
      相关资源
      最近更新 更多