繁体   English   中英

实体框架播种未创建数据

[英]Entity Framework Seeding is not creating data

我可以成功执行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();之间有什么区别context.SaveChanges(); vs base.Seed(context);

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

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

我正在这样设置初始化程序:在您的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
   }
}

它有效:-)

我认为您无需对base.Seed(context)进行base.Seed(context)

请执行下列操作

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; }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM