【问题标题】:MVC Getting Error - CREATE DATABASE permission deniedMVC 出现错误 - CREATE DATABASE 权限被拒绝
【发布时间】:2014-08-14 13:06:54
【问题描述】:

我第一次使用 MVC,运行应用程序时出现此错误。

这是我的步骤。

  1. 创建一个新的MVC 空项目
  2. 安装 Entity framework 5.0.0 (PM> Install-Package EntityFramework -Version 5.0.0)
  3. 在 Model-MovieReview.cs 和 MovieReviewContext.cs 中添加两个类。

MovieReview Class 是这个

MovieReviewContext 类就是这个

  1. 在 Controllers 文件夹中,我添加了一个名为 HomeController 的新控制器。这是。

然后我在 Google Chrome 或 IE 上运行它。我得到了我在顶部提到的错误。 不明白该怎么办。感谢您的帮助

编辑 我没有更改任何文件中的任何自动生成的代码。

【问题讨论】:

  • 请从您的 web.config 添加您的数据库配置(连接字符串等)和实体框架设置。

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5


【解决方案1】:

尝试在 web.config 中添加连接字符串,类似于。

  <connectionStrings>
    <add name="MovieReviewContext" 
         connectionString="Data Source=.; Integrated Security= true; Initial Catalog=MovieReviewContext;" 
         providerName="System.Data.SqlClient" />
  </connectionStrings>

【讨论】:

  • 如果您不希望连接字符串的名称基于上下文的命名,您可以创建一个构造函数,该构造函数使用特定连接字符串的名称调用基本构造函数。跨度>
  • 谢谢。我添加了连接字符串,它可以工作 ^_^ 。谢谢。
【解决方案2】:

您应该检查您用于连接到您的 SQL Server 的用户是否有权在您的 SQL Server 中创建数据库。您收到的错误表明您的用户没有此权限。

【讨论】:

  • 或者创建一个没有权限的用户的空白数据库,EF 将填充它。
  • @DavidG 这也是正确的但我没有提到它,因为我认为OP使用代码优先的方法。
  • 如果您创建数据库,从技术上讲仍然是代码优先。可以说,您可以创建整个架构并将代码指向它,它仍然是代码优先的。 :)
  • @DavidG 啊,我好的。我不知道。谢谢!
  • @RomoDaneghyan 你欢迎老兄!我很高兴你解决了你的问题。
【解决方案3】:

正如消息所示,您需要向您在 web.config 文件中指定的用户授予 CREATE DATABASE 权限。

【讨论】:

    【解决方案4】:
    • 创建空应用程序
    • 添加您的模型(电影、评论、评论和数据访问层或 DDL(存储库)
    • 添加控制器
    • 添加视图
    • 使用模型属性创建数据库
    • 在 web.config 中添加连接字符串

    我会添加这样的模型上下文:

    public class Movie
    {
        public int Id { get; set; }
        public string Title { get; set; }
    }
    public class Review
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public virtual ICollection<Comment> Comments { get; set; }
    }
    public class Comment
    {
        public int Id { get; set; }
        public string Title { get; set; }
    }
    
    public class MovieReviewService
    {
        private MovieContext movieContex;
        private ReviewContext reviewContext;
        private CommentContext commentContext;
    
        public MovieReviewService(string connectionString)
        {
            this.movieContex = new MovieContext(connectionString);
            this.reviewContext = new ReviewContext(connectionString);
            this.commentContext = new CommentContext(connectionString);
        }
    
        public void AddMovie(Movie movie)
        {
            this.movieContex.Add(movie);
        }
        public void UpdateMovie(Movie movie)
        {
            this.movieContex.Update(movie);
        }
        public void DeleteMovie(int id)
        {
            this.movieContex.Delete(id);
        }
        public Movie GetMovie(int id)
        {
            return this.movieContex.Get(id);
        }
    
    }
    
    internal class MovieContext : DbContext
    {
        private DbSet<Movie> Movies { get { return this.Set<Movie>(); } }
    
        internal MovieContext(string connectionString)
            : base(connectionString)
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    
            modelBuilder.Entity<Movie>()
                .HasKey(key => key.Id);
    
            base.OnModelCreating(modelBuilder);
        }
    
        internal void Add(Movie movie)
        {
            var existing = this.Movies.Find(movie.Id);
    
            if (existing == null)
            {
                existing.Id++;
                existing.Title = movie.Title;
    
                this.Entry<Movie>(existing).State = EntityState.Added;
                this.SaveChanges();
            }
        }
        internal void Update(Movie movie)
        {
            var existing = this.Movies.Find(movie.Id);
    
            if (existing != null)
            {
                existing.Title = movie.Title;
    
                this.Entry<Movie>(existing).State = EntityState.Modified;
                this.SaveChanges();
            }
        }
        internal void Delete(int movieId)
        {
            var movie = this.Movies.Find(movieId);
    
            if (movie != null)
            {
                this.Entry<Movie>(movie).State = EntityState.Deleted;
                this.SaveChanges();
            }
        }
        internal Movie Get(int movieId)
        {
            return this.Movies.Find(movieId);
        }
        internal IEnumerable<Movie> GetAll()
        {
            return this.Movies;
        }
    }
    
    internal class ReviewContext : DbContext
    {
        private DbSet<Review> Movies { get { return this.Set<Review>(); } }
    
        internal ReviewContext(string connectionString)
            : base(connectionString)
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    
            modelBuilder.Entity<Review>()
                .HasKey(key => key.Id)
                .HasMany(comment => comment.Comments);
    
            base.OnModelCreating(modelBuilder);
        }
    
        //add your features or action
    }
    
    internal class CommentContext : DbContext
    {
        private DbSet<Comment> Movies { get { return this.Set<Comment>(); } }
    
        internal CommentContext(string connectionString)
            : base(connectionString)
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    
            modelBuilder.Entity<Comment>()
                .HasKey(key => key.Id);
    
            base.OnModelCreating(modelBuilder);
        }
    
        //add your features or action
    }
    

    【讨论】:

      【解决方案5】:

      您的应用程序正在尝试访问数据库,但它不存在。当您更改用于运行应用程序的机器时,通常会发生这种情况。当我能做到这一点时,我所做的只是“修改数据库”。 在服务器资源管理器下,您转到您的数据库:

      1.右键点击它。

      2.会出现下拉菜单,点击修改。

      3.连接屏幕会出现点击,确定在底部。

      4. 会弹出另一个屏幕,询问您是否要重新创建数据库

      【讨论】:

        【解决方案6】:

        你写的代码很好,没有问题。

        1. 您应该检查您在 web.config 中编写的连接字符串名称,该名称应与继承 DbContext 的类名称相同,这意味着您的连接字符串名称应为“MovieReviewContext”。
        2. 查看数据库用户是否有创建数据库的权限

        希望这项工作顺利

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 2014-04-30
          • 2013-08-16
          • 2011-08-03
          • 2015-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多