我想知道为什么在首先使用代码时会出现错误,但在数据库优先时却没有。为了让您快速了解我的应用程序,这是我的课程:
[Table("Votes")]
public class Vote {
[Key()]
public int Id { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public virtual User User { get; set; }
[ForeignKey("Answer")]
public int AnswerId { get; set; }
public virtual Answer Answer { get; set; }
}
在这行代码之后:
Vote v = new Vote();
v.UserId = 1;
v.AnswerId = 1;
using (var context = new DatabaseContext()) {
context.Votes.Add(v);
context.SaveChanges();
}
我收到错误:
An unhandled exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll
Additional information: An error occurred while updating the entries. See the inner exception for details.
因此,当我将code first
与SQLExpress
数据库一起使用时,会发生错误。当我使用database first
SQLite
数据库时,它就像一个魅力。相同的类,但没有错误。
我注意到,为避免出错,我必须初始化v.User
和v.Answer
。但为什么?在database first
中,这是不必要的。
答案 0 :(得分:0)
看起来你没有编写db上下文类。您需要创建dbcontext类,例如。
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using Votes.Models;
namespace vote.Context
{
public class DatabaseContext : DbContext
{
public DatabaseContext() : base("VotesDatabase")
{ }
public DbSet<Vote> Votes{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
以下是您了解基本的codefirst MVC应用程序的示例。 Creating MVC Applications Using Entity Framework Code First Approach