[英]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-migrations
, Add-Migration Initial
和Update-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.