model-view-controller - Entity Framework 和缓存 - 更改会追溯到缓存

标签 model-view-controller caching entity-framework-4

我从实体模型中提取了一些数据。这包含元素的属性,比如说汽车零件的最大速度、重量和尺寸。由于零件很多,而且基本属性永远不会改变,所以我缓存了所有记录。

根据使用这些部件的汽车,这些属性现在可能会更改,因此我设置了一辆新车,将缓存项“Engine”中的值复制到新汽车对象,然后添加“TurboCharger”,这提高发动机的最大速度、重量和尺寸。

我遇到的问题是,实体模型似乎仍在跟踪上下文返回到缓存的数据。因此,当通过本地方法增加权重时,它会为所有用户增加权重。我尝试将 "MergeOption.NoTracking" 添加到我的上下文中,因为这应该删除所有实体跟踪,但它似乎仍然在跟踪。如果我关闭缓存,它会正常工作,因为它每次都会从数据库中提取新值。

如果我想从实体模型中复制记录,有没有办法可以说“复制对象,但将其视为没有来自实体的历史记录的标准对象”,以便一旦我的汽车具有来自的属性一个元素,它只是一个扁平的物体?

干杯!

最佳答案

我不太确定 MergeOption.NoTracking 在整个上下文中以及它的确切作用,但您可以做的替代方案是将 .AsNoTracking() 添加到数据库中的查询中。这肯定会返回一个分离的对象。 请在此处查看有关 AsNoTracking 使用的一些详细信息: http://blog.staticvoid.co.nz/2012/04/entity-framework-and-asnotracking.html .

另一件事是确保在插入到缓存之前枚举您的集合,以确保您不在可查询范围内进行操作,即使用 .ToArray()。

另一个选项是手动从上下文中分离对象(使用 Detach(T实体))。

关于model-view-controller - Entity Framework 和缓存 - 更改会追溯到缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202733/

相关文章:

java - 在 Java 中实例化 MVC 对象时处理依赖关系

caching - 如何在 Vaadin 中禁用浏览器缓存

ruby-on-rails - Rails 模型缓存

c# - 用于特定搜索功能的服务器端缓存 JQuery 自动完成

c# - 如何将单个实体映射到多个表

asp.net-mvc - 使用 Entity Framework 我只想包含第一个子对象而不是子的子(子的子)

model-view-controller - MVC::什么是模型?

javascript - 使用 bundle.config bundle 2 个具有相同名称和参数的函数的 .js 文件后会发生什么?

ruby-on-rails - 不使用主键查找帖子

entity-framework-4 - 以任何方式使用Entity Framework Code First可以很好地了解类结构?