Visual Studio 2013和Entity Framework

6
我正在使用VS 2013和SQL Svr 2012,尝试使用EF填充gridview。由于这只是一个非常简单的测试,我只有一个带有关键字和几个数据字段的表。创建模型的过程似乎很好-在设计视图中显示如预期那样,在app_code中创建文件,在bin文件夹中创建了2个dll,并且配置文件更新了连接字符串和其他条目。
当我尝试选择“命名连接”时,出现错误“无法加载指定的元数据资源”,并且谈论重建项目以获取程序集。
我已经花了几个小时阅读其他类似案例,但我无法理解:
1.为什么在VS 2010中从未出现此问题时会发生这种情况
2.如何修复连接字符串以指向它想要的资源。我对全限定程序集名称的技术建议一无所知-我尝试的所有方法都不起作用。
3.如何设置某些参数以强制资源放在正确的位置?我阅读的所有建议似乎与VS 2013没有太大关系
我需要决定是否卸载VS 2013并使用VS 2012。目前,我正在使用具有ASP 4.0的VS 2010,我希望转到ASP 4.5并通常跟上微软技术的步伐。然而,我没有处理有错误的VS版本的技能水平。对我来说,这EF execise可能是由于错误或计算机上的奇怪损坏-我试图弄清楚哪种情况。我在干净的机器上安装了VS 2013 Express和SQL Svr 2012,该机器以前没有这些工具。
我真的很想看到非常熟悉Visual Studio的人尝试复制我的问题,因为这只需要几分钟:
  1. 在MS SQL Server中,创建一个带有一个主键和几个数据字段的表格,并填充一些测试数据——将其称为名为TinyDB的TestTable1。

  2. 使用VS 2013 Express for Web,创建一个“新网站”,选择“ASP Empty Web Site”选项并使用VB。

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

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

  5. 在default.aspx上添加一个Web表单,并将GridView拖到它上面。在GridView的设计模式下,选择“新数据源”,然后选择“Entity”选项(注意默认情况下出现的EntityDataSource1的名称)。点击下一步,在“named connection”下选择“TinyDBEntities”——这就是我遇到“无法加载指定的元数据资源”的错误的地方。

请注意,使用VS 2010进行此操作完美运行,并显示正确的数据网格。

1个回答

8

很遗憾,EntityDataSource控件不支持最新版本的Entity Framework,即EF6。希望在未来的VS或EF更新版本中能够更新该控件,但目前您不能同时使用这两个东西。

有几个解决方案/替代方案:

  1. 回到EF 5。为此,请从App_Code文件夹中删除.edmx和.tt文件,从Bin文件夹中删除EF程序集,并从web.config中删除对EF的引用。然后重建站点,添加一个新的ADO.NET实体模型,并在“选择您的版本”对话框中选择版本5。然后从App_Code文件夹中删除.tt文件,打开EDMX diagam,在空白处右键单击,在属性网格上将代码生成策略设置为Legacy ObjectContext。然后再次重建,就可以正常工作了。

  2. 使用模型绑定。这真的是推荐的解决方案。微软/EF团队建议人们远离EntityDataSource控件,并仅在动态数据Web网站中使用它,模型绑定是首选solultion。它非常干净和直观地使用,并提供了对查询和对象更新的很多控制。有关Model Binding的更多信息,请查看:http://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data


1
嗨Imar,你的第一个建议完美地解决了我的问题,我会继续学习第二个建议中的模型绑定教程 - 非常感谢!我应该指出,你的步骤需要按照给定的确切顺序进行(在更改EDMX属性之前删除.tt)。此外,在我的小测试中,自动EF更新配置文件需要剪切粘贴将ConfigSections移回文件开头。非常感谢你详细的解决方案以及对更广泛问题的见解! - Bicycle Dave

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