更新实体时EF 6行为不当

时间:2014-07-07 18:13:50

标签: c# entity-framework

我有一个附有events列表的实体...将其视为“发生在我身上的事件”的列表......

每个活动都有SourceUser,这也是一个实体......

问题是:当我尝试更新实体时,会创建一个新事件并在此事件上标记当前用户,当我呼叫Update时,EF 6不会将用户视为现有用户用户(我认为它将其识别为新的)并且它正在尝试插入它,这会导致主键违规...

我该如何处理?我如何告诉EF该事件是新的,但它的相关实体不是新的?!?

EDIT1:
@Jonesy我继承了这个代码和(除了关键字)它是葡萄牙语所以我不认为它会有多大意义,但我可以解释它!这里:当用户发送请求时,我抓取一个令牌,并通过身份验证过滤器从数据库中检索用户并构建一个“上下文”对象,该对象具有“CurrentUser”...在创建事件时,我只是抓住“ CurrentContext.CurrentUser” ...

1 个答案:

答案 0 :(得分:1)

当您处理断开连接/分离的Entity Framework POCO对象时,会出现此问题。因为DbContext不跟踪实体的更改。具体而言,参与多对多关系的实体会出现问题,其中EF隐藏了模型本身的“连接表”。

分离实体的问题在于,数据上下文无法知道对对象图进行了哪些更改,而无需从数据存储中获取数据并进行逐个实体的比较 - 并且假设它是可以采用与最初相同的方式获取。

此链接可以帮助您:

Why Does Entity Framework Reinsert Existing Objects into My Database?

Solving the detached many-to-many problem with the Entity Framework