asp.net – EF是否在DbContext的不同实例之间缓存实体?
|
在 Asp.net中为每个查询创建DbContext是否只使EF从其缓存中读取数据,或者每次都查询整个集合的数据?我知道每个AppDomain的元数据缓存,但只是数据呢? 上下文:使用MVC4 Web API前端的数据采集和可视化应用程序不会称之为“高容量”,但许多查询在较短的时间范围内返回相同的数据集. 解决方法实体框架每个AppDomain没有数据缓存,每个上下文实例只有一个缓存.如果为每个请求或查询创建新上下文,则从空缓存开始,EF将从数据库中获取数据. 此外,术语“每个上下文实例的缓存”可能会产生误导,因为它并不意味着如果实体已经加载到上下文缓存中,EF将不会对数据库运行查询.此缓存的工作方式以及如何利用它(或不利用)如下: > DbSet上的每个LINQ到实体查询< T>或通常在IQueryable< T>上将运行数据库查询,无论实体是否已存在于上下文中.但是,如果在上下文中已存在与查询实体具有相同密钥的实体,则EF将抛出该查询的结果并将缓存的实体实例返回给调用者. 它会在运行查询后检查具有相同密钥的实体是否存在. (对于复杂查询 – 例如包含Include的查询 – 它之前无法执行此检查,因为它无法知道将返回哪些实体和键值.) 这是默认行为(MergeOption是AppendOnly).我相信您可以将此行为更改为OverwriteChanges和其他选项,但它们都不会避免LINQ查询始终发出数据库查询. 这里的问题是,如果Local上的查询没有返回结果,则没有逻辑可以自动查询数据库.您必须手动编写此逻辑.更大的问题是Local上的查询是LINQ-to-Objects而不是LINQ-to-Entities(Local不实现IQueryable< T>,只有IEnumerable< T>),所以你经常需要重写你的查询到act on Local – 例如你不能使用Include here,你不能使用任何EntityFunctions,你会得到不同的行为,用于字符串比较有关区分大小写等等. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – MVC Controller返回Chunked内容编码
- asp.net-mvc – 如果抛出自定义异常,则重定向asp.net mvc
- 在ASP.NET中上传文件时运行病毒扫描
- Mono,asp.net c#和MVC如何和教程
- asp.net-mvc-3 – MVC-Mini-Profiler错误地显示重复的查询
- asp.net-mvc – ASP.NET MVC中的动态网站地图
- iis-7.5 – IIS 7.5 Siteminder不保护ASP.net MVC请求
- ASP.NET MVC Razor:三元
- asp.net-mvc – ASP.NET MVC不提供默认文档
- asp.net-mvc – Css和脚本不工作,直到用户登录网站 – Asp.
