我正在使用E.F.和Code First方法......现在我必须用一些数据填充数据库......但我不能轻易做到...... Simething不清楚...... 我已经google了,但我发现的每个解决方案都假设我必须创建一个自定义初始化...但我不想创建自定义初始化..
我需要的是一种方法,每次我启动一些测试DROP数据库,重新创建它并用一些数据填充它。
我试图做的是:
public PublicAreaContext()
: base("PublicAreaContext")
{
Database.SetInitializer<PublicAreaContext>(new DropCreateDatabaseAlways<PublicAreaContext>());
}
然后我试图强制Seed
类中的Configuration
方法。所以:
internal sealed class Configuration : DbMigrationsConfiguration<PublicAreaContext>
{
protected override void Seed(PublicAreaContext context)
{
...
}
}
但是当我尝试调试时,我从不进入种子方法......我进入Configuration
类的构造函数,但不是种子...为什么?
Thanx求助
答案 0 :(得分:6)
你混淆种子方法。创建数据库时可以使用一个初始化程序,还有一个用于迁移。见http://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/
由于您正在使用DropCreateDatabaseAlways,因此迁移不会运行,所以请执行以下操作:
public static class MyDatabase
{
public static void Initialize()
{
Database.SetInitializer(new MyInitializer());
}
}
public class MyInitializer : DropCreateDatabaseAlways<PublicAreaContext>
{
protected override void Seed(PublicAreaContext context)
{
base.Seed(context);
context.Roles.Add(new Role
{
ID = 1,
Name = "User",
});
context.Roles.Add(new Role
{
ID = 2,
Name = "Admin",
});
context.SaveChanges();
}
}
http://www.techbubbles.com/aspnet/seeding-a-database-in-entity-framework/