6

我正在使用 VS 2013 和 SQL Svr 2012 并尝试使用 EF 填充网格视图。由于这是一个非常简单的测试,我只有一个带有键的表和几个数据字段。创建模型的过程似乎工作正常 - 它在设计器视图中按预期显示,文件在 app_code 中创建,使用 2 个 dll 创建 bin 文件夹,配置文件使用连接字符串和其他条目进行更新。

当我尝试选择“命名连接”时,我收到错误“无法加载指定的元数据资源”,它谈到重建项目以获取程序集。

我花了几个小时阅读其他类似的案例,但我无法理解:

  1. 为什么在 VS 2010 从来都不是问题时会发生这种情况

  2. 如何修复连接字符串以指向它想要的资源。我完全迷失了关于完全限定程序集名称的所有技术建议——我尝试的任何方法都不起作用。

  3. 如何设置一些参数以强制资源位于正确的位置?我读过的所有建议似乎都与 VS 2013 不太相关

我需要决定是否应该卸载 VS 2013 并使用 VS 2012。目前,我正在使用带有 ASP 4.0 的 VS 2010,我想迁移到 ASP 4.5 并通常跟上微软的技术。但是,我没有处理有问题的 VS 版本的技能水平。在我看来,这个 EF 执行可能是由于我的计算机上的错误或一些奇怪的损坏 - 我试图弄清楚是哪种情况。我在过去没有这些工具的干净机器上安装了 VS 2013 Express 和 SQL Svr 2012。

我真的很想看到非常熟悉 Visual Studio 的人尝试复制我的问题,因为这样做只需要几分钟:

  1. 在 MS SQL Server 中,创建一个包含一个表的小型数据库,该表具有一个主键和几个数据字段,并填充一些测试数据 - 使用 TestTable1 将其称为 TinyDB。

  2. 使用 VS 2013 Express for Web,使用 VB 创建一个带有“ASP 空网站”选项的“新网站”。

  3. 添加一个包含“ADO.Net 实体数据模型”的 ASP App_Code 文件夹,并将名称保留为“模型”。

  4. 从数据库生成模型并为“TinyDB”创建一个“新连接”并使用 Entity Framework 6.0,然后选择“TestTable1”。注意命名空间是“TinyDBModel”。单击“完成”将在 App_Code、其他文件夹中生成几个项目,并更新 web.config。

  5. 添加一个名为 default.aspx 的 web 表单并将一个 gridview 拖到它上面。在gridview 的设计模式中,选择“新数据源”,然后选择“Entity”选项(注意出现在default.aspx 中的EntityDataSource1 的名称)。单击下一步并在“命名连接”下选择“TinyDBEntities” - 这是我收到错误“无法加载指定的元数据资源”的地方。

请注意,VS 2010 中的这个精确练习可以完美运行,并生成一个显示正确数据的网格。

4

1 回答 1

8

不幸的是,EntityDataSource 控件不适用于最新版本的实体框架 EF6。希望控件在 VS 或 EF 的未来更新版本中得到更新,但现在您不能同时使用这两者。

有一些解决方案/替代方案:

  1. 回到 EF 5。为此,请从 App_Code 文件夹中删除 .edmx 和 .tt 文件,从 Bin 文件夹中删除 EF 程序集,并从 web.config 中删除对 EF 的引用。然后重建站点,添加一个新的 ADO.NET 实体模型并在选择您的版本对话框中选择版本 5。然后从 App_Code 文件夹中删除 .tt 文件,打开 EDMX 图表,右键单击空白处并在 Properties Grid 上将 Code Generation Strategy 设置为 Legacy ObjectContext。然后再次重建,它应该可以工作。

  2. 使用模型绑定。这确实是推荐的解决方案。Microsoft / EF 团队建议人们远离 EntityDataSource 控件,仅将其用于动态数据网站,模型绑定是首选解决方案。它非常干净且易于使用,并且可以让您对查询和对象更新进行大量控制。有关模型绑定的更多信息,请查看:http ://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data

于 2013-10-27T08:16:04.863 回答