0

我需要临时修改内存中实体的集合,而框架不会因错误而爆炸。我有两个正在使用的实体。实体 A 有一个集合,我只需要从中删除一个项目并将我动态创建的另一个项目添加到它。实体 B 使用实体 A 中的该项目进行计算,但在其任何属性中都没有对它的引用。问题是当我去保存实体 B 时,它会因为实体 A 的内存更改而爆炸。我绝不会尝试保存实体 A,框架只是发现我对其进行了更改并抛出此错误:

无法更改关系,因为一个或多个外键属性不可为空

我正在使用 poco 类并单独保存每个实体,所以我很困惑为什么当我保存实体 B 时框架也试图保存实体 A。如果这会产生差异,那么 pocos 都使用 EntityTypeConfiguration 类连接起来。

有没有办法告诉单个实体在一段时间内不要跟踪自己?

4

1 回答 1

0

您应该在不跟踪的情况下获取您的实体 A。与DbContext

var aList = context.As.AsNoTracking();

使用ObjectContext(您不使用,但无论如何)

context.As.MergeOption = MergeOption.NoTracking;
var aList = context.As;

因此,EF 不会跟踪A's 上的任何更改,更不用说保存它们了。

于 2012-09-27T22:32:38.607 回答