EntityFramework进阶(二)- DbContext预热
本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处
在DbContext首次调用的时候,会很慢,甚至会有5,6秒的等待,通常称为冷查询。再次调用的时候,几毫秒就能请求完。原因是首次调用的时候,DbContext会验证模型,缓存视图信息等操作。我们可以提前预生成视图来缓解延迟。
/// <summary> /// dbcontext预热 /// /// </summary> private void PreLoad<TDbContext>() where TDbContext:DbContext,new() { using (var dbcontext = new TDbContext()) { var objectContext = dbcontext.GetObjectContext(); var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace); mappingCollection.GenerateViews(new List<EdmSchemaError>()); } //对程序中定义的所有DbContext逐一进行这个操作 }
dbcontext.GetObjectContext()方法的实现参考上篇博客 EntityFramework进阶(一)- DbContext与ObjectContext互转