出現這個錯誤的原因是在控制器中初始化上下文StudentContext 時,在上下文的內部使用瞭如下方法:
namespace WebApi.Controllers
{
public class StudentsController : ApiController
{
private StudentContext db;
protected StudentsController()
{
db = new StudentContext();
Database.SetInitializer(new DbChange());
}
// GET: api/Students
[HttpPost,HttpGet]
public User.Models.Student GetStudents()
{
return db.Students.ToList().First();
}
public StudentContext() : base("name=StudentContext")
{
//錯誤原因
Database.SetInitializer(new DbChange());
Database.Initialize(true);
}
public System.Data.Entity.DbSet<Student> Students { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//錯誤原因
Database.SetInitializer(new DbChange());
Database.Initialize(true);
}
這兩個( //錯誤原因
Database.SetInitializer(new DbChange());
Database.Initialize(true);)同時加入(OnModelCreating()和StudentContext())會報控制器創建錯誤異常,
如果僅僅在OnModelCreating()中加入這兩句會報如下圖錯誤:因此在web中使用code first可以將初始化數據庫放在調用的構造方法中。