实体框架代码优先:使用控制台应用程序初始化数据库

Rob*_*ert 3 entity-framework code-first

我正在尝试运行初始化代码,但它没有运行.这是我在main方法中的内容

    static void Main(string[] args)
    {
        Database.SetInitializer<Context>(new RecipesSeedData());

    }
Run Code Online (Sandbox Code Playgroud)

我是否应该在main中添加其他内容以使其运行以下代码?当我逐步调试调试器中的代码时,它甚至没有进入初始化代码,这让我觉得我错过了一些重要的东西.

public class RecipesSeedData : DropCreateDatabaseAlways<Context>
{
    protected override void Seed(Context context)
    {
        var mt = new MenuType {MenuTypeId = 1};

        context.MenuTypes.Add(mt);

        base.Seed(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

Paw*_*wel 7

您刚刚告诉EF,在初始化数据库时,它需要使用您的初始化程序,但您没有告诉它实际初始化数据库.在DbContext上执行某些操作时,将初始化数据库.这是一篇很好的文章,它描述了幕后发生的事情:http://blog.oneunicorn.com/2011/04/15/code-first-inside-dbcontext-initialization/(包括有关DbInitializers的详细信息)