MVC“添加控制器”是“无法检索元数据...配置系统无法初始化”

时间:2011-11-23 07:55:04

标签: asp.net-mvc visual-studio entity-framework

从头开始,我用两个项目创建了一个新的解决方案:一个是MVC 3,另一个是支持EF 4.2项目。整个事情成功建立。从MVC项目中,我打开“添加控制器”对话框,让它根据我从支持的EF项目中选择的上下文和模型生成代码。 “添加控制器”对话框失败,显示消息:

  

无法检索“MyModelClass”的元数据。配置系统无法初始化。

我注意到“添加控制器”对话框实际上是在尝试从其web.config文件中获取数据库连接字符串。首先,由于支持EF项目已经有一个带有连接字符串的app.config,这让我觉得很愚蠢。但是从来没有意识到,我能想到的最好的是web.config中的连接字符串不知何故。这就是它的样子:

<add name="Monsters2Entities" 

    connectionString="
      metadata=res://*/Monsters.csdl|
               res://*/Monsters.ssdl|
               res://*/Monsters.msl;
      provider=System.Data.SqlClient;
      provider connection string=&quot;
        data source=.;
        initial catalog=Monsters2;
        integrated security=True;
        pooling=False;
        multipleactiveresultsets=True;
        App=EntityFramework
      &quot;" 
      providerName="System.Data.EntityClient" 
/>

连接字符串实际上没有所有荒谬的换行符和缩进 - 我只是想让它更容易阅读。无论如何,该连接字符串基本上与在其上建模的支持EF项目中使用的连接字符串相同。如何纠正这种情况,让“添加控制器”拨号快乐?

11 个答案:

答案 0 :(得分:8)

我安装了EF 6,其中添加了:

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

在我的配置文件中。我有其他脚手架问题,因此决定回到Ef 5.卸载EF 6并重新安装EF 5后,我从配置中删除了,然后我就能够构建我的新控制器了。我通过使用

发现了这一点
PM> Update-Database –Verbose

答案 1 :(得分:2)

只需将您的EF模型项目App.Config中的连接字符串信息复制到您的中,并注意您不要重复任何部分(例如,entityFramework部分)

          的                   

答案 2 :(得分:1)

试试这个:

<add name="Monsters2Entities" 

    connectionString="
      metadata=res://*/Monsters.csdl|
               res://*/Monsters.ssdl|
               res://*/Monsters.msl;
      provider=System.Data.SqlClient;
      provider connection string='
        data source=.;
        initial catalog=Monsters2;
        integrated security=True;
        pooling=False;
        multipleactiveresultsets=True;
        App=EntityFramework
      '" 
      providerName="System.Data.EntityClient" 
/>

我已将&quot;替换为'

答案 3 :(得分:1)

我将此添加到我的Global.Asax文件中,以便a)数据库立即启动并且b)添加了表定义。允许Controller查找表定义:

 System.Data.Entity.Database.SetInitializer<ProjectName.DAL.DBConnectContextName>(new CreateDatabaseIfNotExists<ProjectName.DAL.DBConnectContextName>());

答案 4 :(得分:0)

当我遇到这个问题时,我发现thjis有所帮助:

卸载EF的预发行版并安装EF5 去了Sql Server对象资源管理器并删除了db。 重建解决方案 用过的PM&gt; Update-Database -Verbose

也许问题在于预发布EF或只需要清洁味觉。

我对所有这些都很陌生,但这确实让我使用Add Controller脚手架工具和“选择了使用Entity Framework的读/写操作和评论的MVC控制器”模板。

答案 5 :(得分:0)

首先,您应该检查您的连接字符串是否必须位于ROOT中的Web.Config文件中!之后检查是否存在另一个连接字符串,如果有另一个连接字符串,则将其替换为连接字符串.... 这解决了我和你的问题相同的问题......

答案 6 :(得分:0)

我设法通过将edmx的代码生成策略更改为T4,添加EF5 Db Context并在* .tt和* .Context.tt文件中替换%edmxInputFile%来解决我的问题。

答案 7 :(得分:0)

重命名Model类 - 为我工作

答案 8 :(得分:0)

在创建Controller之前,您确定在Web.Config文件中有ConnectionString吗?有时我们创建另一个包含Entity DB Context的项目,我们忘记在另一个项目中的Web.Config中添加相同的connectionString。

<connectionStrings>
    <add name="Monsters2Entities" ...  />
</connectionStrings>

答案 9 :(得分:0)

I face this issue "Unable to retrieve metadata..." while I was dding a Controller. Solution for this is as follows.

  1. In Connection String change provider to "system.data.sqlclient" 2.or Remove the Connection String from the Web.config and Add controller and after adding controller again add the connection String.

It seems this is a bug in MVC. I hope with this you can go ahead.

答案 10 :(得分:-1)

首先需要安装包实体框架

转到工具&gt; Libray包管理器&gt; pakage manager console&gt; :安装实体框架