我们正在尝试确定何时运行实体框架数据库初始化程序。
MSDN表示初始化发生在"第一次"我们访问数据库。什么时候"第一次"?
MSDN自相矛盾,声称初次使用DbContext
的实例时首次运行,但也是第一次{{>> 的{{>> 1}}被使用。这是什么?
此外,MSDN没有定义"第一次"?这是自发布以来的第一次吗?自Application_Start以来的第一次?给定方法的第一次给定方法?如果我们通过更改web.config重新启动应用程序怎么办?
以下是MSDN的一些引用,说数据库初始化程序运行...
第一次使用DBContext派生类的实例时
http://msdn.microsoft.com/en-us/library/gg696323%28v=vs.113%29.aspx
当第一次使用给定的DbContext类型访问数据库时
http://msdn.microsoft.com/en-us/library/gg679461%28v=vs.113%29.aspx
例如,我们有一个控制器操作,我们在其中实例化DbContext
并运行插入操作。如果我们将此操作调用两次(或10,000次),那么DbContext
会多次运行吗?如果我们正在使用DbInitializer
初始值设定项,并且我们将此操作调用两次,那么Db是否会有两个DropDatabaseCreateAlways
行,或者初始值设定项会在插入之间删除Db,从而留下一个{{1}行?
Event
答案 0 :(得分:6)
每个AppDomain启动时,实体框架会初始化数据库一次。
当代码首次实例化DbContext
类,并且访问其中一个属性时,它使用处理初始化逻辑的InternalContext
实例,并确保所述初始化使用静态类字段只运行一次。
如果您对web.config文件进行了更改,或者当应用程序池回收或iis进程本身重新启动时,您的应用程序域将再次启动并启动初始化程序。 This post should help in knowing when this happens in web applications.
多次重复使用相同的上下文实例,甚至在每个请求上创建新的上下文,每次都不会触发初始化。