1

ここのところ頭が痛いです。モデル ファースト アプローチを使用して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時間これをいじっています。

4

1 に答える 1