从T4更改EF 6代码生成策略

时间:2013-10-15 12:07:23

标签: c# entity-framework

过去我已经成功创建了edmx文件。这是使用EF5和Visual Studio 2012.我已经升级到Visual Studio 2013和EF6。现有的EF 5代码仍然有效,但现在我遇到了问题。我可以创建edmx文件和EntityDataSource,我可以配置数据源,它可以很好地看到表和列,但是当我尝试刷新模式时,我得到:

  

由于EntityDataSource出现以下错误,无法确定架构:

     

无法找到(我的类型)

的CLR类型

我已经看到一个在线解决方案告诉我将我的代码生成策略更改为默认值(在EF 5中创建的现有edmx文件被设置为Legacy ObjectContext),但它不会让我这样做因为选项' T4'显示为灰色。

enter image description here

有没有办法可以强制代码生成策略不使用T4?

编辑:

Pawel声称EntityDataSource不支持EF 6.是否有可用的教程显示如何连接到EF 6的简单分步指南?我从Beginning ASP.Net 4这本书中获得了所有的EF信息,但现在显然已经过时了。我看到EF 6仍然处于测试阶段。也许他们会在某个阶段添加对EntityDataSource的支持?

编辑2:

好的,我已经习惯了这一点,我可以使用LinqDataSource进行连接。我几天都没有机会玩它,但它看起来很有效。

编辑3:

使用LinqDataSource不起作用。它可以执行的唯一CRUD操作是Read。显然必须有一种方法来使用新的EF 6.0框架(Pawel建议我使用MVC),但它们不能完全打破我的场景(使用网站),可能吗?

编辑4:

我找到了适用于我的方案的解决方案,请参阅下面的答案。

6 个答案:

答案 0 :(得分:12)

如果在VS2012 / VS2013中使用EF6,由于EF6的变化,唯一支持的生成策略是T4。您可以使用T4 templates from VS Gallery获取基于EntityObject的实体和基于ObjectContext的上下文。注意:EntityDataSource目前不支持EF6。

修改

支持EF6的EntityDataSourceControl的预览现在为available

答案 1 :(得分:10)

我已经拥有了VS2013社区,我正在为同样的问题而奋斗。就像您的图像一样,代码生成策略被禁用,我的意思是,它无法更改,但是......右键单击属性名称"代码生成策略"然后只需点击“重置”即可。并且属性值将更改为Legacy ObjectContext!

我希望它可以帮助别人!

PD:抱歉,我的英语很可怕! XP

答案 2 :(得分:4)

在Ef6中,您可以使用旧版上下文。只需右键单击edmx文件,然后在打开时使用选项在XML查看器中打开它。然后搜索遗留并将其值设置为true。

答案 3 :(得分:1)

正如Pawel所提到的,你只能在EF 6中使用T4。我所做的让我的系统重新使用EF 5是使用NuGet包管理器卸载EF 6(网站 - >管理NuGet包 - >已安装包 - > EntityFramework - >卸载)。然后我不得不使用NuGet包管理器添加EF 5(相同的菜单,但在线而不是已安装的包)。然后我不得不从web.config中删除以下内容:

<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

现在,当我添加一个ADO.NET实体数据模型时,它会询问我想要使用的实体框架版本,但实体框架6.0显示为灰色。这显然是一个错误,它应该在安装EF 6.0时问这个问题,而不是在安装它时。安装时它从未询问我想要的版本,只是自动创建了6.0版的edmx

答案 4 :(得分:0)

我有同样的问题和(EF6),当我将元数据工件处理更改为&#34;复制到输出目录&#34;我仍然得到同样的错误。这被认为是解决我的大部分问题的方法。

我的步骤(重现错误):

创建一个名为DAL的目录,添加edmx文件,允许它创建连接字符串,添加两个表,构建。

创建一个default.aspx页面,从工具箱中拖动EntityDataSource,单击弹出配置数据源,从上面选择我的命名连接,然后收到错误:

无法加载连接字符串中指定的元数据。考虑重建Web项目以构建可能包含元数据的程序集。发生以下错误:提供程序未返回ProviderManifest实例。

现在试图找到解决方案大约24小时。

所以现在当我选择EF5(而不是6)并且我在上面做了一些步骤时,我右键单击图表面并转到属性我改变了两个设置:

1。)工件处理到&#34;复制到输出目录&#34; 2.)将代码生成策略更改为&#34; Legacy ObjectContext&#34;来自T4

这允许我从工具箱中拖动EntityDataSource,单击弹出配置数据源,从上面选择我的命名连接,一切都回到爱的世界编程......

我只花了24个小时和2个浪费的编码日来最终拼凑出合适的解决方案。我的笔记本电脑变得扁平并重新安装,但是我太过绝望了,把头发拉了出来。

答案 5 :(得分:0)

我正在使用visual studio 2015

  1. Dbl单击解决方案资源管理器中的xxx.edmx文件,这应该打开 设计师中的diagarm,

  2. 按alt + enter打开属性窗口

  3. 寻找&#34;代码生成策略&#34; property - 从下拉列表中选择值T4从遗留对象内容。