C# 在MVC4中添加控制器不工作

C# 在MVC4中添加控制器不工作,c#,asp.net-mvc,C#,Asp.net Mvc,我正在使用VS 2010 Premium。我有一个使用SQLCE4.0和实体框架模型的MVC4项目 模型为: public class ProjectBuild { public int ProjectBuildID {get;set;} public string name {get;set;} } public class ProjectBuildContext:DbContext { public DbSet&l

我正在使用VS 2010 Premium。我有一个使用SQLCE4.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;}
     }
当我尝试使用内置脚手架创建新控制器时,我也会遇到以下错误:

无法检索ProjectBuild“”的元数据,请使用相同的 DbCompiledModel可针对不同类型的数据库创建上下文 不支持服务器。请创建单独的DbCompiledModel 对于正在使用的每种类型的服务器


这似乎是最愚蠢的事情,但您是否已连接到其他位置的数据库?我遇到了同样的问题。我在服务器资源管理器视图中打开了数据库(我已连接到我的SDF文件)。一旦我关闭了此连接,一切都很正常。

好的,这是我对问题的邪恶解决方案。我终于让它工作了。Win8 VS2012 EF5 MVC4

  • 确保已安装Nuget软件包EntityFramework.SqlServerCompact
  • 首先,不要手动添加DbContext,而是使用scaffolding菜单中的
  • 当您使用scaffolding创建了一个Controller+视图后,请切换回web.config中的旧connectionstring,即使用SQL CE 4.0的连接字符串。然后,一切都很好

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

以下是我的总结步骤:

  • 已安装Nuget软件包EntityFramework.SqlServerCompact
  • 将默认构造函数添加到我的DbContext类中

    公共类学校上下文:DbContext { 公共学校上下文():基础(“学校””{} ... }

  • 我的连接字符串是:

    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0" />
    
    
    

然后它就成功了。

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


//此解决方案是从

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

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

例如:

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

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

公共类MovieDBContext:DbContext
{
public MovieDBContext():base(“Movie”){}
}

你看,
“MovidDBContect”
不同于
“Movie”"

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


我能够再次看到数据库。我仍在开发中,需要添加更多控制器,因此我想我必须再次使用它。但这花了我整个上午的时间才弄明白为什么我突然无法在服务器资源管理器中看到数据库。

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

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="System.Data.SqlServerCe.4.0" />
  </parameters>
</defaultConnectionFactory>

更简单的方法是安装

有关更多详细信息,请查看此

  • 创建控制器
  • 在web.config中添加字符串上下文
  • 这是一个按时间顺序排列的问题,不是一个bug。 资料来源:VôThường的comm

    如果它对任何人都有帮助,请注意。 我只是有这个问题

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


    一切正常。

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

    [DbConfigurationType(typeof(MySqlEFConfiguration))]
    
    注释掉这个类属性。 构建项目。 然后在MySql上添加一个控制器对我很有效


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

    在我的DbContext中可能存在重复的无原因我没有引用DefaultConnection的构造函数。我有相同的问题,我正在使用Windows 8。没有。我在服务器资源管理器中没有打开的连接。我关闭了连接并尝试了,但没有使用:(上述解决方案对我有效,但当我向上下文中添加更多类时,它不再有效。嘿!!我正在使用MySql。还没有找到解决方案。任何解决方案?对我无效:(给定连接字符串不能为null或空字符串错误。连接字符串名称和数据库名称处的双星号是否用于强调或SQL CE要求?+1也适用于我!@TheVillageDiot此答案的格式有点扭曲。我试图修复它,但无法使其满意。
    **
    旨在加粗文章中的文本以强调,不应包含在连接字符串中。@JohnnyHK yes**将内容加粗,但在代码块中不起作用。这将删除错误并允许添加控制器,但仅进行此更改—不添加EntityFramework.SqlServerCompact包—似乎会导致EF使用SQ改为L Express。非常感谢!这对我很有帮助-只是注释了连接字符串,添加了控制器,取消了注释。完成!我的连接中的SQL CE部分似乎有问题
    [DbConfigurationType(typeof(MySqlEFConfiguration))]