首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架缓存刷新

实体框架缓存刷新
EN

Stack Overflow用户
提问于 2012-09-10 04:47:15
回答 1查看 453关注 0票数 0

在实体框架(任何版本)中清除DB查询缓存时,是否有与此Rails辉煌相当的功能?我一直有这个问题,似乎找不到一个简单的方法来解决这个问题:

所有关联方法都是围绕缓存构建的,这使得最新查询的结果可以用于进一步的操作。缓存甚至在方法之间共享..。 但是,如果您想重新加载缓存,因为数据可能已经被应用程序的其他部分更改了,该怎么办?只需将true传递给关联调用:

代码语言:javascript
复制
customer.orders                 # retrieves orders from the database
customer.orders.size            # uses the cached copy of orders
customer.orders(true).empty?    # discards the cached copy of orders
                                # and goes back to the database
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-10 08:13:14

这是可能的,但这些方法不能直接在实体上使用。为了实现这一点,您必须与上下文交互。

如果只需要重新加载单个实例,可以使用:

代码语言:javascript
复制
dbContext.Entry(order).Reload();

如果需要通过单个调用重新加载多个实例,则可能需要使用ObjectContext API:

代码语言:javascript
复制
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(RefreshMode.StoreWins, customer.Orders);

另一种方法是运行查询,而不是使用Refresh,但这要求您显式地构建一个查询来加载正确的订单:

代码语言:javascript
复制
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<Order>();
objectSet.MergeOption = MergeOption.OverwriteChanges;
objectSet.Where(o => o.CustomerId == customer.Id).ToList();

查询和Refresh之间的主要区别将是性能(Refresh可能对集合中的每个订单使用单独的查询)和新实体(刷新只加载您指定的实体,而查询也将加载新的实体)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12345459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档