实体框架代码第一种子数据库

Cic*_*cio 2 entity-framework-6

我正在使用EF与Code First方法......现在我必须用一些数据填充数据库...但我不能轻易做到... Simething不清楚...我用google搜索但我找到的每个解决方案都假设我必须创建一个自定义Initilization ...但我不想创建自定义初始化..

我需要的是一种方法,每次我启动一些测试DROP数据库,重新创建它并用一些数据填充它.

我试图做的是:

public PublicAreaContext()
    : base("PublicAreaContext")
{
    Database.SetInitializer<PublicAreaContext>(new DropCreateDatabaseAlways<PublicAreaContext>());
}
Run Code Online (Sandbox Code Playgroud)

然后我试图SeedConfiguration类中强制执行该方法.所以:

internal sealed class Configuration : DbMigrationsConfiguration<PublicAreaContext>
{
    protected override void Seed(PublicAreaContext context)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试调试时,我从不进入种子方法......我进入了Configuration类的构造函数,但不是种子...为什么?

Thanx的帮助

Ste*_*ene 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

其他例子:http: //www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm

http://www.techbubbles.com/aspnet/seeding-a-database-in-entity-framework/