MVC获取错误 - CREATE DATABASE权限被拒绝

时间:2014-08-14 13:06:55

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

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

这是我的步骤。

  1. 创建新的MVC空项目
  2. 安装实体框架5.0.0(PM> Install-Package EntityFramework -Version 5.0.0)
  3. 在Model-MovieReview.cs和MovieReviewContext.cs中添加两个类。
  4. MovieReview Class就是这个

    MovieReview

    而MovieReviewContext类就是这个 enter image description here

    1. 在Controllers文件夹中,我添加了一个名为HomeController的新Controller。这是enter image description here
    2. 然后我在Google Chrome或IE上运行它。我得到了我在顶部提到的错误。 无法理解该怎么做。谢谢你的帮助

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

6 个答案:

答案 0 :(得分:3)

尝试在web.config中添加连接字符串,例如。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

  • 创建空应用程序
  • 添加模型(电影,评论,评论和数据访问层或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
}

答案 4 :(得分:0)

您的应用程序正在尝试访问数据库,但它并不存在。当您更改用于运行应用程序的计算机时,通常会发生这种情况。当我能够跨越那个时,我所做的只是为了修改数据库&#34;。 在服务器资源管理器下,您将转到数据库:

1.点击它。

2.将出现下拉菜单并单击修改。

3.单击连接屏幕,然后在底部确定。

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

答案 5 :(得分:0)

您的书面代码很好,没有问题。

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

  3. 希望这很好用