无法使用代码第一实体模型中的初始数据初始化dbcontext

时间:2012-10-17 15:27:34

标签: asp.net-mvc entity-framework

我正在使用asp.net mvc。我正在尝试实现Code-First Entity Model。我已经完成了以下步骤,

1,我创建了一个student.cs类

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public string Branch { get; set; }
    public decimal Marks { get; set; }
    public string Address { get; set; }
}

2,我有类似的上下文类,

 public class StudentContext:DbContext
    {
        public StudentContext()
        {
            Database.SetInitializer(new StudentContextInitializer());
        }

        public DbSet<Student> Student { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }

3,我创建了studentcontextinitializer类,如

public class StudentContextInitializer : DropCreateDatabaseIfModelChanges<StudentContext>
    {
        protected override void Seed(StudentContext context)
        {
            context.Student.Add(new Student { StudentName="madhav",Branch="CSE",Marks=888,Address="AKP" });
            context.Student.Add(new Student { StudentName = "Tirumalesh", Branch = "IT", Marks = 988, Address = "MDP" });
            context.Student.Add(new Student { StudentName = "Venkat", Branch = "ECE", Marks = 1000, Address = "BZA" });
            context.SaveChanges();
        }
    }

我已成功连接到数据库,但我无法使用某些数据初始化dbcontext,这意味着我已在studentcontextinitializer类中对某些记录进行了硬编码,但我无法将这些记录绑定到数据库表中。所以请指导我。

1 个答案:

答案 0 :(得分:2)

您的DropCreateDatabaseIfModelChanges只会在您更改模型时初始化数据库。你有几个选择:

  1. 手动删除数据库并重新运行。
  2. 更改模型属性。例如,将public string test { get; set; }添加到Student实体并重新运行。
  3. DropCreateDatabaseAlwaysInitializer扩展您的初始化程序。这将导致每次重建和重新运行应用程序时都会删除,重新创建和播种数据库。