在MVC4中添加控制器不起作用

我正在使用VS 2010 Premium。 我有一个使用SqlCe 4.0和entity framework模型的MVC4项目。

型号是:

public class ProjectBuild { public int ProjectBuildID {get;set;} public string name {get;set;} } public class ProjectBuildContext:DbContext { public DbSet builds {get;set;} } 

下面是我的连接字符串:

  add name="ProjectBuildContext" connectionString="Data Source=|DataDirectory|DB.sdf" providerName="System.Data.SqlServerCe.4.0" 

当我尝试使用内置脚手架创建一个新的控制器时,我收到以下错误:

“无法检索ProjectBuild的元数据”。“不支持使用相同的DbCompiledModel为不同类型的数据库服务器创建上下文。而是为每种使用的服务器创建单独的DbCompiledModel。

我尝试了Fontanka16解决方案,但它没有用,结果发现我的DbContext类缺少定义目标CE数据库的默认构造函数。

这些是我的步骤摘要:

  • 安装了Nuget包EntityFramework.SqlServerCompact。
  • 在我的DbContext类中添加了默认构造函数。

    public class SchoolContext:DbContext {public Sc​​hoolContext():base(“ School ”){} …}

  • 我的连接字符串是:

      

然后它奏效了。

我将连接字符串的名称更改回DefaultConnection然后它工作,我首先尝试添加默认构造函数,但收到一些警告,没有正确的程序集引用。

我是新手使用EF和MVC,但我发现如果你没有定义数据连接(注释掉)或在web.config中重命名它,Visual Studio将允许你添加控制器。 如果未定义连接,则EF将自动使用SQLExpress。 添加控制器后,您可以将连接字符串添加回web.config,程序将按预期运行。

//此解决方案摘自http://forums.asp.net/t/1838396.aspx/1?Error+while+adding+controller+class+Unable+to+retrieve+metadata+for+MvcMovie+Models+电影+

您应该始终使用base(string) 初始化超类 。 还发现Web.config中connectionString的名称可能与您发送给超类构造函数的String不同。

例如:

  public class MovieDBContext : DbContext { public MovieDBContext() : base("Movie") { } } 

所以你看, "MovidDBContect""Movie"不同。

  1. 创建控制器
  2. 在web.config中添加字符串上下文

这是一个按时间顺序排列的问题,而不是一个错误。 资料来源:来自VôThường的通讯http://www.itorian.com/2012/10/unable-to-retrieve-metadata-for.html

注意它是否有助于任何人。 我刚遇到这个问题。

这修复了它:1。注释掉连接字符串2.重建没有连接字符串的网站3.添加控制器4.取消注释连接字符串5.重建网站

一切正常。

添加带有Entity Framework 6和MySQL数据库的API 2.0 / MVC5控制器时,我遇到了这个问题。

 [DbConfigurationType(typeof(MySqlEFConfiguration))] 

评论此类属性。 建立项目。 然后添加一个控制器在MySql上为我工作。

添加控制器后取消注释并继续正常运行。

这似乎是最愚蠢的事情,但你在其他地方与数据库建立了联系吗? 我遇到了同样的问题。 我在Server Explorer视图中打开了数据库(我已经连接到我的SDF文件)。 一旦我关闭了这个连接,一切都很完美。

好吧,这是我解决问题的邪恶方法。 我终于成功了。 Win8 VS2012 EF5 MVC4

  • 确保安装了Nuget包EntityFramework.SqlServerCompact
  • 首先,不要手动添加DbContext。 而是使用脚手架菜单中的
  • 使用scaffolding创建一个Controller + Views后,切换回web.config中的旧连接字符串 – 使用SQL CE 4.0的连接字符串。 那么一切都适合我

我觉得这是相关的,但我使用上面的解决方案来解决问题,让我再次构建控制器。 我之后遇到的问题是,在服务器资源管理器中,我似乎无法找到我的SQL Compact数据库。 当我添加应用程序时,它似乎正在工作,但我找不到它。 删除构造函数后:public class SchoolContext:DbContext {public Sc​​hoolContext():base(“School”){}。

我能够再次看到数据库。 我还在开发中,需要添加更多控制器,所以我必须再次使用它,我想。 但是整个上午我都想知道为什么我突然看不到服务器资源管理器中的数据库了。

如果您使用的是VS 2012,则还需要告诉EF使用SQL Compact而不是localDb。

       

更简单的方法是安装EF SQL Compact Nuget包 。

有关更多详细信息,请查看此博客条目 。