10

User テーブルと Roles テーブルがあります。User テーブルと Roles テーブルの ID を含む、自動生成された UsersRoles リンク テーブルがあります。これは、次のコードを使用して生成されます。

modelBuilder.Entity<User>()
                .HasMany(u => u.Roles)
                .WithMany(r => r.Users)
                .Map(c => { 
                    c.MapLeftKey("UserId");
                    c.MapRightKey("RoleId");
                    c.ToTable("UsersRoles");
                });

関連のないエンティティを追加して呼び出しようとするとContext.SaveChanges()、次のエラーが表示されます。

PRIMARY KEY 制約「PK_UsersRoles」に違反しています。オブジェクト 'dbo.UsersRoles' に重複するキーを挿入できません。重複キーの値は (2beaf837-9034-4376-9510-b1609c54efbe, dcd16d00-d46e-4d48-8328-3e7b35b11ccf) です。ステートメントは終了されました。

エラーに記載されている項目を確認しConext.ChangeTracker.Entries()ましたが、エンティティの状態は Unchanged とマークされています。

追加済みとしてマークされている唯一のエンティティは、追加しようとしている新しいレコードであり、それ以外はすべて変更なしとしてマークされています。

エンティティを追加するためのコード:

 RoleGroup group = Context.RoleGroups.Create();
 group.Title = roleGroupName;
 Context.Set<RoleGroup>().Add(group);
 Context.SaveChanges();

なぜこれが起こっているのか誰にも分かりますか?

4

4 に答える 4

1

ユーザー/ロールの同じ組み合わせを UserRoles テーブルに挿入しようとしています:

Violation of PRIMARY KEY constraint 'PK_UsersRoles'. Cannot insert duplicate key in object 'dbo.UsersRoles'. The duplicate key value is (2beaf837-9034-4376-9510-b1609c54efbe, dcd16d00-d46e-4d48-8328-3e7b35b11ccf). The statement has been terminated.

2beaf837-9034-4376-9510-b1609c54efbe の ID を持つユーザーと、dcd16d00-d46e-4d48-8328-3e7b35b11ccf の ID を持つロールを確認します。そのユーザーを一度だけ入力したことが確かな場合、データを挿入するメソッドが気付かないうちに複数回呼び出されていますか?

于 2013-09-04T13:12:51.280 に答える