我可以成功执行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-migrations
,Add-Migration Initial
和Update-database
答案 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; }
}