实体框架和缓存 - 更改正在追溯到缓存

时间:2012-04-18 04:22:10

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

我从实体模型中提取了一些数据。这包含项目的属性,比如说具有最大速度,重量和大小的汽车零件。由于有很多部分,基本属性永远不会改变,我已经缓存了所有记录。

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

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

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

干杯!

1 个答案:

答案 0 :(得分:2)

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

另一件事是确保在插入缓存之前枚举你的集合,以确保你不在queriable中行动,即使用.ToArray()。

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

相关问题