【问题标题】:WebMatrix 2 doesn't recognize EntityFramework helperWebMatrix 2 无法识别 EntityFramework 助手
【发布时间】:2012-12-11 23:21:33
【问题描述】:

我刚开始研究 WebMatrix,我学习了 this 教程来学习基础知识,然后我从 this 开始学习 WebMatrix 上的实体框架(注意:该教程适用于 WebMatrix 1,但我看到的唯一改变是您将帮助程序安装到项目中的方式)。问题是,我安装了 Entity Framework 帮助程序,但我的项目无法识别 EntityFramework.dll。

我收到此错误The type or namespace name 'MaxLength' could not be found (are you missing a using directive or an assembly reference?)。但是 EntityFramework.dll 确实出现在我的 bin 文件夹中,这是怎么回事?我不明白为什么引用不起作用。

这是我根据第二个教程和安装 EntityFramework 助手后的 Web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <system.web>
    <compilation debug="true" targetFramework="4.0"><assemblies><add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /><add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /></assemblies></compilation>
  </system.web>
  <connectionStrings>
    <add name="BookContext" connectionString="Data Source=|DataDirectory|Books.sdf" providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>
</configuration>

这是编译器输出link

我错过了什么吗?为什么我的项目无法正确识别 EntityFramework.dll?

更新

当我从 Visual Studio 2012 中创建的网页项目中复制 EntityFramework.dll 时,我认为问题已解决,但即使不再显示错误,WebMatrix 仍然无法识别 Table、Column、ForeignKey 等注释, 逆属性等。

我真的不明白,创建了一个简单的数据库,但我不能使用 EntityFramework 注释来指定数据库所需的所有内容。 WebMatrix 应该识别 EntityFramewor.dll 但它不是。我需要帮助,因为我真的迷路了。

【问题讨论】:

  • MaxLengthAttribute 位于 System.ComponentModel.DataAnnotations.dll 程序集中。 msdn.microsoft.com/en-us/library/…
  • 实体框架也有一个 MaxLengthAttribute msdn.microsoft.com/en-us/library/…
  • 是的,它曾经存在于 EntityFramework 中,但后来被移至 System.ComponentModel.DataAnnotations
  • 那么像 Table、Column、InverseProperty 之类的注释呢,我正在尝试使用这些注释生成数据库,但即使它们来自它们所在的 EntityFramework,它们也无法识别System.ComponentModel.DataAnnotations 命名空间,我不明白为什么微软决定这样做。除了 EntityFramework,我还有什么其他选择?
  • 我应该将 using 指令 ​​using System.ComponentModel.DataAnnotations.Schema; 添加到您的页面中。

标签: entity-framework dll webpage webmatrix


【解决方案1】:

您看到的错误是您网站上安装的 EntityFramework 版本的最终结果。

EntityFramework 5.0 包安装 EntityFramework.dll 的 4.4 或 5.0 版本,具体取决于项目所针对的 .NET 版本(4.0 或 4.5)。

根据我的经验,从 WebMatrix 中的 NuGet 库安装 EntityFramework 总是将 EntityFramework.dll 的 4.4 版复制到 bin 文件夹中:您可以查看属性 --> EntityFramework.dll 文件的详细信息来检查它。

我知道的唯一解决方案是使用 VisualStudio Express 或其他独立实用程序下载 EntityFramework v.5.0(查看这篇文章:Install Entity Framewok v5 in Webmatrix 2 RC),然后简单地用这个替换 WebMatrix 中 NuGet Gallery 安装的 dll。

更新

使用 EntityFramework v.5.0 和 WebMatrix 试验的其他问题是类型“System.Data.EntityState”是在未引用的程序集中定义的并且需要使用指令对于 DataAnnotations.Schema

在 web.config 中添加以下引用解决了第一个问题(查看Could not load file or assembly 'System.Data.Entity):

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

第二个问题需要添加指令

using System.ComponentModel.DataAnnotations.Schema;

到代码。

无论如何,在我看来,WebMatrix 不是基于 EntityFramework 开发网站的正确工具。

【讨论】:

  • 我按照你说的做了,并在 Visual Studio 中创建了一个项目,并从 packages 文件夹中复制了 EntityFramework.dll,在 EntityFramework.5.0.0 文件夹中我找到了一个 lib 文件夹,我在其中找到了另外两个文件夹,一个名为 net40,另一个名为 net45。我将 net45 文件夹中的 dll 复制到我的 WebMatrix 项目中,并且错误停止出现,但是没有创建数据库,也没有识别 EntityFramework 属性(它们没有像普通属性一样突出显示),我还缺少什么吗?
  • 我必须在某处手动添加引用吗? this 是我说 dll 未被识别时所指的内容,而其余 dll 正在被识别,根据教程,当我运行空时,EF dll 不是其中之一cshtml 应该在 App_Data 文件夹上创建一个数据库,但正如您在图像中看到的那样,没有创建数据库,这就是为什么我要问是否应该在其他地方添加引用。感谢您的帮助。
  • 您确定在运行站点时没有创建数据库吗?如果您在浏览器中看到与 Brind 文章中相同的输出并且没有抛出异常,则数据库在您的 App_Data 文件夹中;你仍然应该刷新你的文件夹树来查看它。
  • 好的,在我关闭并重新打开 WebMatrix 后它确实出现了,多么奇怪,但现在它可以工作了,感谢您的帮助。
  • 最后一个问题,我应该把重建数据库的 _AppStart.cshtml 文件放在哪里?因为每次运行网页时都不会删除数据
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多