ここのところ頭が痛いです。モデル ファースト アプローチを使用してEntity Framework 4 で設計された、Session と User オブジェクトの間に 1 対 0 または 1 の関係があります。
- ユーザーにはセッションが必要です ( one )
- セッションにはユーザー ( 0 対 1 ) を含めることができます。
したがって、実行時に、次を使用してデータベースからセッションをプルします
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 が既に存在するという例外をスローします。問題は、挿入すべきではないことです。セッションを更新し、それに属する外部キーを埋める必要があります。 外部キーはリレーションのユーザー側に存在します。これで問題ありませんよね?
edit ユーザーは新規ユーザーでなければなりません。ユーザーの更新は、私が達成しようとしていることではありません。また、エラーは、コードがキーを更新するだけでなく、同じ主キー値でセッションを挿入しようとするためです。
以下は、何をすべきかの時系列リストです。
- セッションが作成される
- セッションが保存されます
- セッションはデータベースから選択されます
- ユーザーが作成される
- ユーザー <-> セッション関係が設定されます
- ユーザーが保存される
そして、私が得るものは次のとおりです。
PRIMARY KEY 制約 'PK_Sessions' に違反しています。オブジェクト 'dbo.Sessions' に重複するキーを挿入できません。重複キーの値はVALUEです。ステートメントは終了されました。
私を助けてください、私は過去2時間これをいじっています。