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

时间:2016-02-11 14:11:30

标签: entity-framework-6

我正在使用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求助

1 个答案:

答案 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.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/