4

我想首先使用代码创建一个数据库。而且我的数据库始终处于“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 设计/默认行为造成的?

4

2 回答 2

0

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

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

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

于 2013-06-25T18:13:01.707 回答
0

当您对上下文执行查询、从检索或调用方法时,将调用数据库初始化程序ObjectContextDbContextDatabase.Initialize

因此,如果您想立即创建数据库而不执行查询,您应该使用:

context.Database.Initialize(false);
于 2013-06-25T18:13:04.190 回答