我第一次使用MVC,运行应用程序时出现此错误。
这是我的步骤。
MVC
空项目MovieReview Class就是这个
而MovieReviewContext类就是这个
然后我在Google Chrome或IE上运行它。我得到了我在顶部提到的错误。 无法理解该怎么做。谢谢你的帮助
EDIT 我没有在任何文件中更改任何自动生成的代码。
答案 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)
我会添加一个这样的模型上下文:
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)
您的书面代码很好,没有问题。
检查是否创建数据库的数据库用户权限
希望这很好用