我正在使用VS 2013和SQL Svr 2012,并尝试使用EF来填充网格视图。由于这是一个非常简单的测试,所以我只有一个带有键和几个数据字段的表。创建模型的过程似乎运行得很好——它在设计器视图中如预期那样显示,文件在app_code中创建,使用2个dll创建bin文件夹,并使用连接字符串和其他条目更新配置文件。
当我尝试选择"命名连接"时,我会收到错误"无法加载指定的元数据资源",它会讨论重建项目以获取程序集。
我花了几个小时阅读其他类似的案例,但我无法理解:
-
为什么在VS 2010 从未出现问题的情况下会发生这种情况
-
如何修复连接字符串以指向它所需的资源。关于完全合格的程序集名称,我完全听不懂所有的技术建议——我尝试的都不起作用。
-
如何设置一些参数以强制资源位于适当的位置?我读到的所有建议似乎都与VS 2013 不太相关
我需要决定是否应该卸载VS 2013并使用VS 2012。目前,我正在使用VS 2010和ASP 4.0,我想转到ASP 4.5,总体上跟上微软的技术。然而,我没有足够的技能来处理一个有缺陷的VS版本。在我看来,这名EF高管可能是由于我的电脑出现了漏洞或一些奇怪的损坏——我正在努力弄清楚是哪种情况。我在一台以前没有这些工具的干净机器上安装了VS2013Express和SQLSvr2012。
我真的很想看到一个非常熟悉Visual Studio的人尝试复制我的问题,因为这只需要几分钟:
-
在MS SQL Server中,创建一个包含一个主键和几个数据字段的表的小型数据库,并用一些测试数据填充——称之为TinyDB with TestTable1。
-
使用VS2013ExpressforWeb,使用VB.创建一个带有"ASP空网站"选项的"新网站">
-
添加包含"ADO.Net实体数据模型"的ASP App_Code文件夹,并将名称保留为"模型"。
-
从数据库生成模型,并使用实体框架6.0为"TinyDB"创建"新连接",然后选择"TestTable1"。请注意,名称空间是"TinyDBModel"。单击"完成"将在App_Code和其他文件夹中生成多个项目,并更新web.config。
-
添加一个名为default.aspx的web表单,并将一个网格视图拖到上面。在网格视图的设计模式中,选择"新数据源",然后选择"实体"选项(注意EntityDataSource1的名称,它显示在default.aspx中(。单击下一步,在"命名连接"下选择"TinyDBEntities"-这就是我的错误"无法加载指定的元数据资源"的地方。
请注意,VS2010中的这一精确练习非常有效,并生成了一个显示正确数据的网格。
遗憾的是,EntityDataSource控件不能与最新版本的Entity Framework EF6一起使用。希望控件在VS或EF的未来更新版本中得到更新,但目前您不能同时使用这两者。
有几个解决方案/替代方案:
-
回落至EF 5。为此,请从App_Code文件夹中删除.edmx和.tt文件,从Bin文件夹中删除EF程序集,并从web.config中删除对EF的引用。然后重建站点,添加新的ADO.NET实体模型,并在"选择您的版本"对话框中选择版本5。然后从App_Code文件夹中删除.tt文件,打开EDMX diagam,右键单击一个空白点,并在Properties Grid上将Code Generation Strategy设置为Legacy ObjectContext。然后再次重建,它应该会起作用。
-
使用模型绑定。这确实是推荐的解决方案。Microsoft/EF团队建议人们远离EntityDataSource控件,只将其用于动态数据网站,模型绑定是首选解决方案。它使用起来非常干净和直接,并且可以让您对查询和对象更新有很大的控制权。有关模型绑定的更多信息,请查看:http://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data