如何在EF 4.1中覆盖Database.SetInitializer

时间:2012-01-17 16:13:09

标签: entity-framework-4.1 code-first

我正在尝试使用EF 4.1的代码优先能力为数据库播种

我在Global.asax的Application_Start方法中有以下代码

Database.SetInitializer<Context>(new DataContextInitializer());

我的Context类只包含一些Public DbSet语句。

这是我的DataContextIntilializer类:

public class DataContextInitializer: CreateDatabaseIfNotExists<Context>
{
    protected override void Seed(Context context)
    {

        new List<Member>{
        new Member { LastName = "Allen", FirstName = "Steve", Email = "Jeremy_Allen@Domain.com" },
        new Member { LastName = "Mickey", FirstName = "Mouse", Email = "mickey_mouse@Domain.com" },
        new Member { LastName = "Optimus", FirstName = "Prime", Email = "Optimus_Prime@Domain.com" },

   }.ForEach(m => context.Members.Add(m));

   base.Seed(context);
}

我的“受保护的覆盖无效种子”方法甚至没有被调用。我的实施不正确吗?我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的数据库是否已创建?你是如何触发数据库创建的?设置初始化程序只会告诉EF一旦需要数据库它应该使用什么初始化程序,但它不会触发创建。数据库是在EF首次需要时创建的,或者一旦您调用它就会创建:

context.Database.Initialize(false);

如果您的数据库已存在,您的初始化程序也将无效。它仅适用于数据库服务器/文件系统上不存在数据库的情况。