从头开始,我用两个项目创建了一个新的解决方案:一个是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="
data source=.;
initial catalog=Monsters2;
integrated security=True;
pooling=False;
multipleactiveresultsets=True;
App=EntityFramework
""
providerName="System.Data.EntityClient"
/>
连接字符串实际上没有所有荒谬的换行符和缩进 - 我只是想让它更容易阅读。无论如何,该连接字符串基本上与在其上建模的支持EF项目中使用的连接字符串相同。如何纠正这种情况,让“添加控制器”拨号快乐?
答案 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"
/>
我已将"
替换为'
答案 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.
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; :安装实体框架