繁体   English   中英

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

[英]Add Controller in MVC4 not working

我正在使用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;}
     }

以下是我的连接字符串:

 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类添加了默认构造函数。

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

  • 我的连接字符串是:

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

然后它起作用了。

我将连接字符串的名称改回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不同。

因此,例如:

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

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

因此,您可以看到"MovidDBContect""Movie"不同。

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

这是一个按时间顺序排列的问题,而不是错误。 资料来源:沃京通讯社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上添加控制器对我有效。

添加控制器后取消注释,并照常继续。

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

好的,这是我对这个问题的邪恶解决方案。 我终于做到了。 Win8 VS2012 EF5 MVC4

  • 确保您已安装Nuget包EntityFramework.SqlServerCompact
  • 首先,不要手动添加DbContext。 而是使用脚手架菜单中的
  • 使用脚手架创建一个Controller + View后,请切换回web.config中的旧连接字符串-使用SQL CE 4.0切换为旧的连接字符串。 那一切对我来说都很好

我觉得这很相关,但是我使用了上面的解决方案来解决问题,然后让我再次构建控制器。 在那之后我遇到的问题是,在那之后我似乎无法在服务器资源管理器中找到我的SQL Compact数据库。 当我添加该应用程序时,它似乎正在运行,但是找不到。 删除构造函数后:public class SchoolContext:DbContext {public Sc​​hoolContext():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>

一种更简单的方法是安装EF SQL Compact Nuget软件包

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM