using (var dbcontext = new CnblogsDbContext()){
var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
mappingCollection.GenerateViews(new List<EdmSchemaError>());
对于ASP.NET应用程序 ,可以将上面的代码放在Application_Start或者PreApplicationStartMethod中执行。
来,给Entity Framework热热身
多种方案,挺详细的:优化EF Code First第一次请求速度
解决二application Initialization
iis8内置功能,安装Application Initialization Module for IIS 7.5,
http://pan.baidu.com/s/1c091WxM
用Ngen安装生成EF的本地镜像
Ngen创建本机映像native-code并将其安装到本机映像缓存中,可通过内存映射被多个进程共享
本机影像生成器(Ngen.exe)工具使用实践
NGen是个什么东西?
禁用第一次ef查询对表__MigrationHistory的问题
使用了ef的Code first会在第一次ef查询的时候会对__MigrationHistory访问,是为了检查数据库和model是否匹配,以保证ef能正常运行。通过监测会先执行下面的sql:
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
) AS [GroupBy1]
GO
SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[ModelHash] AS [ModelHash]
FROM [dbo].[EdmMetadata] AS [Extent1]
ORDER BY [Extent1].[Id] DESC
GO
这段sql语句其实中只是在开发的时候有用,发布到生产环境,可以把这个给禁用了以提高性能。解决办法:
Application_Start加代码
Database.SetInitializer<上下文>(null);
后语:
上面的东西是汇集四海八荒的精髓而成的,不过正确与否以目前本菜的水平和还无法评价,感觉很是不错,谢谢大牛们的分享(尊重原著),感谢大家的阅读o(^▽^)o
再推荐一篇:关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
————————————————
版权声明:本文为CSDN博主「孤的卡布奇诺」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ma15732625261/article/details/72541184/
EF第一次加载较慢的原因以及解决方法(汇)原创孤的卡布奇诺 最后发布于2017-05-19 16:40:17 阅读数 8626 收藏展开前言:这个问题没有遇到过,但是面试当中很可能会被问到,当然也不主要是为了应对面试,学到知识才是王道为什么会慢:在应用程序中定义的每个上下文,其首次使用时,JUST-INTIME编译器:Entity Framework都会根据数据库中...
1、避免在循环中进行查询操作避免在循环中进行查询操作,可以将查询结果缓存到内存中,然后对内存中的数据进行操作,可以提高性能。这种方式适合集合数据量少的数据,否则利大于弊。//不建议的方式:在循环中进行查询操作
foreach(variteminitemList)
varresult=context.Items.FirstOrDefault(i=>i.Id==...
这两天遇到一个奇怪的问题,通过 EF/EF Core 查询数据库速度奇慢,先是在传统的 ASP.NET 项目中遇到(用的是EF6.0),后来将该项目迁移至 ASP.NET Core 也是同样的问题(用的是EF Core 2.2.2)。
问题触发的条件是所查询的字段中存储了很大的字符串(有400多万个字符),查询耗时竟然要40s左右(对,是40秒),CPU消耗也很高,2核CPU消耗50%-80%左右...
在WinForm系统中遇到了个问题,Form1是查询窗口,根据条件查询出所有数据,双击列表后创建弹出Form2窗口编辑单个记录,但编辑后保存后,在Form2中查询到的还是旧的数据,实际数据库中已经更新了,怀疑是4.2中加了查询缓存功能。
用ILSpy查看EntityFramework程序集,发现 System.Data.Entity.DbExtensions有个AsNoTracking的扩展方法
EFCore 复杂SQL查询踩坑记录复杂查询Linq使用Dapper执行SQL语句
在EFCore 中的查询一般通过DbContext.Set().Where()方法来查询,但是这样进行的是单表查询,如果我们需要进行多表关联查询,这种方法就显得非常无力。
以下为本次记录用到的实体类
// 博客实体
public class Blog
public Blog()
Posts = new HashSet<Po
这篇文章多半算是转载吧,
我也是看了
http://personball.com/orm/2014/09/18/entity-framework-6-optimization-ultimate-version/
http://www.lanhusoft.com/Article/127.html
这两篇文章,才学习到的解决方法, 这两篇文章内容基本一致,我就总结一下具体的使用方法吧
最近做了个winform小项目,为方便快速开发,后台框架使用了ef6.0+sqlserver2008架构,遇到各种问题,真是伤脑筋。现将遇到问题和解决方案写下来,方便查阅
提示未注册,找不到驱动程序
No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.S...
1.使用DbContext池
在Core Mvc中,如果使用 AddDbContextPool 方法,那么在控制器请求 DbContext 实例时,我们会首先检查池中有无可用的实例。 请求处理完成后,实例的任何状态都将被重置,并且实例本身会返回池中。 从概念上讲,此方法类似于 ADO.NET 连接池的运行原理,并具有节约 DbContext 实例初始化成本的优势。
services.AddDbContextPool<BloggingContext>( options => opt