我从实体模型中提取了一些数据。这包含元素的属性,比如说汽车零件的最大速度、重量和尺寸。由于零件很多,而且基本属性永远不会改变,所以我缓存了所有记录。
根据使用这些部件的汽车,这些属性现在可能会更改,因此我设置了一辆新车,将缓存项“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/