C# EF 6更新实体时行为不当

C# EF 6更新实体时行为不当,c#,entity-framework,C#,Entity Framework,我有一个实体,它有一个事件列表。。。把它想象成一张“发生在我身上的事”的清单 每个事件都有一个SourceUser,它也是一个实体 问题是:当我尝试更新一个实体时,会创建一个新事件,并且当前用户会在该事件上盖章,当我调用update时,EF 6不会将该用户视为现有用户(我认为它将其识别为新用户)并尝试插入它,这会导致主键冲突 我该怎么办?我如何告诉EF事件是新的,但它的关联实体不是新的 EDIT1: @Jonesy我继承了这段代码,而且(除了关键字)是葡萄牙语的,所以我认为这没有多大意义,但我可

我有一个实体,它有一个
事件列表
。。。把它想象成一张“发生在我身上的事”的清单

每个事件都有一个
SourceUser
,它也是一个实体

问题是:当我尝试更新一个实体时,会创建一个新事件,并且当前用户会在该事件上盖章,当我调用
update
时,EF 6不会将该用户视为现有用户(我认为它将其识别为新用户)并尝试插入它,这会导致主键冲突

我该怎么办?我如何告诉EF事件是新的,但它的关联实体不是新的

EDIT1:

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

当您处理断开连接/分离的实体框架POCO对象时,会出现此问题,。因为DbContext不跟踪对实体的更改。具体来说,问题发生在参与多对多关系的实体上,其中EF对模型本身隐藏了一个“连接表”

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

此链接可以帮助您:


您必须显示一些代码。您如何从数据库中抓取用户以向其添加事件?是否可以发布somde代码?我可能只将用户ID作为事件发送,从而避免了此问题。只设置新事件的
SourceUserId
外键,而不是
SourceUser
导航属性。这个问题似乎脱离了主题,因为它是关于无法显示的代码的,所以不可能准确地指出问题所在