2

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

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

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

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

干杯!

4

1 回答 1

2

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

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

另一种选择是手动将对象从上下文中分离(使用 Detach(T entity))。

于 2012-04-18T04:29:21.593 回答