Sha*_*tin 8 .net c# asp.net entity-framework entity-framework-6
我们试图找出实时框架数据库初始化程序的运行时间.
MSDN说初始化发生在我们访问数据库的"第一次".什么时候是"第一次"?
MSDN自相矛盾,称初始化第一次运行时的情况下的DbContext使用,但也是第一次一个类型的DbContext使用.这是什么?
此外,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次),DbInitializer那么多次运行?如果我们使用DropDatabaseCreateAlways初始化程序,并且我们将此操作调用两次,Db是否会有两Event行,或者初始化程序是否会在插入之间删除Db,从而留下Event一行?
public HttpResponseMessage PostEvent(EventDTO eventDTO)
{
var ev = new Event()
{
Id = eventDTO.Id,
Name = eventDTO.Name
};
using (AttendanceContext db = new AttendanceContext())
{
db.Events.Add(ev);
db.SaveChanges();
}
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
实体框架在每个AppDomain启动时初始化数据库一次.
当DbContext代码首次实例化类,并且访问其中一个属性时,它使用一个InternalContext处理初始化逻辑的实例,并使用静态类字段确保所述初始化仅运行一次.
如果您对web.config文件进行了更改,或者当应用程序池重新启动或iis进程本身重新启动时,您的应用程序域将再次启动并启动初始化程序.这篇文章应该有助于了解Web应用程序何时发生这种情况.
多次重用相同的上下文实例,甚至在每个请求上创建新的上下文,每次都不会触发初始化.
| 归档时间: |
|
| 查看次数: |
484 次 |
| 最近记录: |