2012-10-16 26 views
0

我有以下流暢的配置,用於在用戶和角色之間建立簡單的多對多關係。我需要導航屬性兩種方式,因此有角色中的用戶集合,反之亦然。與EF5多對多2種方式的關係

當我向用戶中插入一個新實體時,EF會嘗試插入一個Role_Id列,當我使用以下方法映射它時。該列顯然是RoleId,而不是Role_Id,而且它在許多表中。用戶上不能有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"); 
        });   

回答

0

我想通了,真的很簡單,因爲關係是兩種方式,我必須指定另一條腿。

當導航是單向時,我擁有它的方式工作。這在導航有兩種方式時起作用。

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