我在这里头疼。我在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 服务器会抛出一个异常,告诉我我尝试在数据库中插入的 GUID已经存在,因为是的,它确实存在。问题是,它不应该插入,它应该更新会话并填充属于它的外键。 外键位于关系的用户端,这没关系,对吧?
编辑 用户应该是新用户。更新用户不是我想要完成的。此外,错误是因为代码尝试插入具有相同主键值的会话,而不是仅仅更新它的外键。
以下是按时间顺序排列的应做事项列表:
- 会话被创建
- 会话被保存
- 从数据库中选择会话
- 用户被创建
- 用户 <-> 会话关系被设置
- 用户被保存
我得到的是:
违反 PRIMARY KEY 约束“PK_Sessions”。无法在对象“dbo.Sessions”中插入重复键。重复键值为VALUE。该语句已终止。
请帮帮我,在过去的两个小时里我一直在摆弄这个。