【发布时间】:2013-10-21 19:53:09
【问题描述】:
我在这里头疼。我在 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 已经存在,因为是的,它确实存在。问题是,它不应该插入,它应该更新会话并填充属于它的外键。 外键位于关系的用户端,这没关系,对吧?
编辑 用户应该是新用户。更新用户不是我想要完成的。 此外,错误是因为代码尝试插入具有相同主键值的会话,而不是仅仅更新它的外键。
这里是按时间顺序排列的应该做的事情:
- 会话被创建
- 会话被保存
- 从数据库中选择会话
- 用户被创建
- 用户 会话关系已设置
- 用户被保存
我得到的是:
违反主键约束“PK_Sessions”。无法在对象“dbo.Sessions”中插入重复键。重复键值为 VALUE。声明已终止。
请帮帮我,过去 2 小时我一直在摆弄这个。
【问题讨论】:
-
我已经删除了我的答案,因为你的问题已经改变了
标签: c# sql sql-server entity-framework