繁体   English   中英

在Entity Framework中更新关系会产生SQL错误

[英]Updating a relationship in Entity Framework generates SQL error

我在这里头疼。 我在Session和User对象之间建立了一对零或一对一的关系,该关系是在Entity Framework 4中使用模型优先方法设计的。

  • 一个用户应该有一个会话( 一个
  • 会话可以有一个用户( 零对一 )。

因此,在运行时,我使用

Session session = context.Sessions.FirstOrDefault(s => s.Token.Equals(token));

然后我创建一个用户,根据这样的用户输入创建

user = context.Users.Create();

user.GUID = Guid.NewGuid();
user.Username = username;
user.Firstname = firstname;
user.Lastname = lastname;
user.Session = session;

context.Users.Add(user);
context.SaveChanges();

当我保存时,SQL Server引发异常,告诉我我尝试插入数据库中的GUID已经存在,因为是的,确实如此。 问题是,它不应该插入,它应该更新会话并填充它所属的forein键。 外键位于关系的用户端,这样可以吗?

编辑用户为新用户。 更新用户不是我要完成的工作。 同样,该错误是因为代码试图插入具有相同主键值的会话,而不仅仅是更新它的前键。

这是应该执行的时间顺序列表:

  • 会话已创建
  • 会话已保存
  • 从数据库中选择会话
  • 用户被创建
  • 用户<->会话关系已设置
  • 用户被保存

我得到的是:

违反PRIMARY KEY约束“ PK_Sessions”。 无法在对象“ dbo.Sessions”中插入重复密钥。 重复的键值为VALUE 该语句已终止。

请帮帮我,过去2个小时我一直在摆弄。

编辑:更改了我的答案以反映更改后的问题描述:)

确保在处理此类更新时始终使用相同的上下文实例。

这里似乎正在发生的事情是,在一个上下文中检索了会话,但是将用户保存在该上下文的另一个实例中。 因此,在新的背景下,该会议被视为是新会议,因此被(错误地)插入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM