实体框架播种未创建数据

时间:2019-08-30 10:48:10

标签: c# entity-framework-6 ef-migrations

我可以成功执行EF迁移。可以创建我的表,但是没有种子数据。我尝试了几种方法为Entity Framework 6播种数据,但无济于事。

public class EmployeeDBContextSeeder :
       DropCreateDatabaseIfModelChanges<EmployeeDBContext>
{
    protected override void Seed(EmployeeDBContext context)
    {
        List<Employee> EmployeeList = new List<Employee>()
        {
            new Employee() { FirstName = "Mark" },
            new Employee() { FirstName = "Ben" },
            new Employee() { FirstName = "John" }
        };

        context.Employees.AddRange(EmployeeList);
        context.SaveChanges();
        //  base.Seed(context);
    }
}

public class EmployeeDBContext : DbContext
{
    public EmployeeDBContext() : base("DB")
    {
        Database.SetInitializer<EmployeeDBContext>(new EmployeeDBContextSeeder());
    }

    public DbSet<Employee> Employees { get; set; }
}

我不确定这两个context.SaveChanges();base.Seed(context);之间有什么区别

我试图将Database.SetInitializer<EmployeeDBContext>(new EmployeeDBContextSeeder());移至global.asax Application_Start(),但仍无法将数据播种到我的表中。

对于迁移命令,我使用enable-migrationsAdd-Migration InitialUpdate-database

3 个答案:

答案 0 :(得分:1)

我正在这样设置初始化器: 在您的DbContext中:

public static void Initialize()
{
   Database.SetInitializer( new MigrateDatabaseToLatestVersion<MyContext, MyConfiguration>() );
}

在migrations文件夹中有配置类:

public sealed class MyConfiguration : 
   DbMigrationsConfiguration<MyContext>
{
   public Configuration()
   {
      AutomaticMigrationsEnabled = true;
   }

   protected override void Seed( MyContext context )
   {
      //insert statements here
   }
}

它有效:-)

答案 1 :(得分:0)

我认为您无需理会base.Seed(context)的电话。

答案 2 :(得分:0)

执行以下操作

public class SchoolDBInitializer : DropCreateDatabaseAlways<SchoolDBContext>
 {
  protected override void Seed(SchoolDBContext context)
  {
      IList<Standard> defaultStandards = new List<Standard>();

    defaultStandards.Add(new Standard() { StandardName = "Standard 1", Description = 
    "First Standard" });
    defaultStandards.Add(new Standard() { StandardName = "Standard 2", Description = 
    "Second Standard" });
    defaultStandards.Add(new Standard() { StandardName = "Standard 3", Description = 
    "Third Standard" });

    context.Standards.AddRange(defaultStandards);

    base.Seed(context);
    }
 }

现在,如下所示在上下文类中设置此数据库初始化程序类。

  public class SchoolContext: DbContext 
  {
    public SchoolContext(): base("SchoolDB") 
    {
       Database.SetInitializer(new SchoolDBInitializer());
    }

    public DbSet<Student> Students { get; set; }
    public DbSet<Standard> Standards { get; set; }
  }