0

ユーザーとロールの間の単純な多対多の関係に対して、次の流暢な構成があります。両方の方法でナビゲーション プロパティが必要なため、ロール内のユーザーのコレクションがあり、その逆もあります。

新しいエンティティを User に挿入すると、EF は Role_Id 列を挿入しようとします。列は明らかに Role_Id ではなく RoleId であり、さらに多対多のテーブルにあります。ユーザーに Role_Id を指定することはできません。

両側にコレクションを持つことで、EFがどういうわけか混乱していると思います。

modelBuilder.Entity<User>().HasMany(_ => _.Roles).WithMany()
                        .Map(_ => 
                        {
                            _.MapLeftKey("UserId");
                            _.MapRightKey("RoleId");
                            _.ToTable("UserRole", "dbo");
                        });         

上記の構成の後に次の構成を配置して、別の方法で関係を作成しようとすると、関係が既に定義されているという例外が発生します。

modelBuilder.Entity<Role>().HasMany(_ => _.Users).WithMany()
                    .Map(_ =>
                    {
                        _.MapLeftKey("RoleId");
                        _.MapRightKey("UserId");
                        _.ToTable("UserRole", "dbo");
                    });         
4

1 に答える 1

0

関係は私がもう一方の足を指定しなければならない2つの方法であるため、私はこれを本当に単純に理解しました。

ナビゲーションが一方向の場合、私が持っていた方法は機能します。これは、ナビゲーションが2つの方法である場合に機能します。

modelBuilder.Entity<Role>().HasMany(_ => _.Users).WithMany(_ => _.Roles)
                    .Map(_ =>
                    {
                        _.MapLeftKey("RoleId");
                        _.MapRightKey("UserId");
                        _.ToTable("UserRole", "dbo");
                    });      
于 2012-10-17T09:17:03.030 に答える