ASP.Net MVC添加控制器错误

时间:2011-08-25 20:49:26

标签: asp.net-mvc

当我尝试添加“MOVIES”控制器时,它出错:“ 生成'MvcMovieSF.Models.MovieDBContext时出错。尝试重建项目 。“

我重建了项目,但仍然出错。提前谢谢!

namespace MvcMovieSF.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }

    public class MovieDBContext : DbContext
    {
        public DbSet Movies { get; set; }
    }
}

JUST NOTICED:我不是坐在自己的电脑上,而是注意到SQLExpress服务没有启动;我没有在此计算机上获得启动服务的权限。这可能是原因吗?

5 个答案:

答案 0 :(得分:8)

添加控制器也会修改上下文类。如果已实现partial class将一些业务规则添加到上下文中,则框架无法成功编辑您的分部类以找到其自身插入的正确点。

但是,愚蠢的是,删除业务规则可能会有所帮助。创建控制器后,您可以将它们放回去。

(至少,这对我有用,10分钟前......)

修改

Context类可能部分实现如下:

public partial class MyDatabaseEntities : DbContext
{
    public override int SaveChanges() { ... }

    #region Some Business Rules Here 
    ...
    #endregion
}

在这里,如果您尝试添加新控制器,则会因错误而失败:“生成'MyDatabaseEntities'时出错。尝试重建项目。” 而且重建根本无济于事......

我的解决方案是:

  1. 删除这些业务规则,当然,请将它们保存在安全的地方,因为之后您可能会需要它们:

    public partial class MyDatabaseEntities : DbContext
    {
        public override int SaveChanges() { ... }
    }
    
  2. 创建您的控制器。你这次应该成功。

  3. 从上下文类中删除框架添加的代码:

    public partial class MyDatabaseEntities : DbContext
    {
        public override int SaveChanges() { ... }
    
        public DbSet<MyModelClass> MyModelClass { get; set; }  // remove this line
    }
    
  4. 重新制定业务规则。

  5. 希望这会有所帮助。

答案 1 :(得分:0)

我在ASP.NET MVC 4中添加新控制器时遇到了同样的问题,我通过将Database.SetInitializer(new SomeDataContextInitializer());从DBContext的构造函数移动到Global.asax.cs中的Application_Start方法来解决了这个问题。希望它有所帮助。

答案 2 :(得分:0)

@Bolt Thunder让我走上正轨。在我的例子中,DbContext类被修改为具有用于测试的IDbSet,这使它成为可能。改变了 - 问题解决了。

答案 3 :(得分:0)

我的项目名称是MVC,我有这个类

 public class download
        {

            public  int download_id { get; set; }
            public  int download_category_id { get; set; }
            public  string download_name { get; set; }
            public  int download_size { get; set; }
            public  string download_description { get; set; }
            public  string download_path { get; set; }
            public  download_category download_category { get; set; }
        }

        public class download_category
        {

            public  int download_category_id { get; set; }
            public  string download_category_name { get; set; }
        }

        public class DownloadDbContext : DbContext
        {
            public DbSet<download> downloads { get; set; }
            public DbSet<download_category> download_categorys { get; set; }
        }

我在脚手架时遇到了类似的错误(生成尝试重建项目时出错)。 我正在使用visual studio 2012版本11.0.50727.1 RTMREL并将实体引用为... \ EntityFramework.5.0.0 \ lib \ net45 \ EntityFramework.dll

首先我将类划分为三个类(三个单独的* .cs文件),并在download和download_category类中使用DataAnnotations,使用[key]作为id列并解决问题。

我的课程如下所示:在Models文件夹中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MVC.Models;
using System.ComponentModel.DataAnnotations;


namespace MVC.Models

{


    public class Download
    {
        [Key]
        public int download_id { get; set; }
        public int download_category_id { get; set; }
        public string download_name { get; set; }
        public int download_size { get; set; }
        public string download_description { get; set; }
        public string download_path { get; set; }
        public Download_category download_category { get; set; }
    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MVC.Models

{

        public class Download_category
        {
            [Key]
            public int download_category_id { get; set; }
            public string download_category_name { get; set; }
        }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace MVC.Models

{

        public class DownloadDbContext:DbContext 
       {
        public DbSet<Download> downloads { get; set; }
        public DbSet<Download_category> download_categorys { get; set; }
       }

}

答案 4 :(得分:0)

我和苏珊有同样的问题。在我的情况下,在上下文类中指定DbSet(public DbSet<Movie> Movies)的模型类型修复了问题。 我正在使用VS 2012,我将Entity Framework 5.0软件包添加到解决方案中。