代码优先:数据库只在执行某些代码后创建?

时间:2013-06-25 17:27:14

标签: .net entity-framework ef-code-first

我想首先使用代码创建数据库。 我的数据库始终处于“DropCreateDatabaseAlways”模式。

我注意到,如果我不尝试对数据库执行某些查询,例如

using (var db = new Models.TnHContext())
        {
            var query = from u in db.Users
                        select u;
            foreach (var u in query)
            {
                txt += u.UserID + "<br/>";
            }
        }

将不会创建数据库。除非我执行它,否则只能看到创建的数据库。想知道这是由于EntityFramework设计/默认行为吗?

2 个答案:

答案 0 :(得分:0)

实体框架懒洋洋地触发数据库初始化。它只会在EF尝试连接到数据库时发生。您可以使用以下方法手动触发数据库初始化。

using (var db = new Models.TnHContext())
{
    db.Database.Initialize(force: false);
}

将force参数设置为false会告诉EF如果已经触发了它,则不要运行初始化。

答案 1 :(得分:0)

当您针对上下文执行查询,从database initializer检索ObjectContext或致电DbContext时,会调用the Database.Initialize method

因此,如果要在不执行查询的情况下立即创建数据库,则应使用:

context.Database.Initialize(false);