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

use*_*145 16 c# asp.net-mvc

我正在使用VS 2010 Premium.我有一个使用SqlCe 4.0和实体框架模型的MVC4项目.

型号是:

  public class ProjectBuild
    {
       public int ProjectBuildID {get;set;}
       public string name {get;set;}
    }

  public class ProjectBuildContext:DbContext
     {
       public DbSet<ProjectBuild> builds {get;set;}
     }
Run Code Online (Sandbox Code Playgroud)

下面是我的连接字符串:

 add name="ProjectBuildContext" connectionString="Data Source=|DataDirectory|DB.sdf"
 providerName="System.Data.SqlServerCe.4.0"
Run Code Online (Sandbox Code Playgroud)

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

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

小智 29

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

这些是我的步骤摘要:

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

    公共类SchoolContext:{的DbContext公共SchoolContext():基地( " 学校 "){} ...}

  • 我的连接字符串是:

    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />
    
    Run Code Online (Sandbox Code Playgroud)

然后它奏效了.


Tho*_*zus 9

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


小智 6

我是新手使用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+电影+


Jaa*_*nus 5

你应该总是初始化超base(string).还发现connectionStringWeb.config 中的名称可能与您发送给超类构造函数的String不同.

例如:

<add name="MovieDBContext"  ....... />

public class MovieDBContext : DbContext
{
   public MovieDBContext() : base("Movie") { }
}
Run Code Online (Sandbox Code Playgroud)

所以你看,"MovidDBContect"不同于"Movie".