복붙노트

[SQL] 엔티티 프레임 워크 데이터베이스 먼저 대다

SQL

엔티티 프레임 워크 데이터베이스 먼저 대다

나는 데이터베이스에서 엔티티 프레임 워크 모델을 만들었습니다. - UserRole - 역할 사용자 : 나는 다 대다 관계를 가지고있다.

EF는 사용자 엔티티와 역할 엔티티에 UserRole 엔티티 및 UserRoles 탐색 속성을 만들었지 만 오히려 역할에서 사용자의 역할 및 사용자이있을 것이다. 즉, 모델 디자이너를 통해 설계 할 수 있습니까? 어떻게 중간에 테이블을 수동으로 다 대다 관계를 구성 할 수 있습니다?

해결법

  1. ==============================

    1.UserRole 테이블은 사용자 및 역할 테이블에 대한 외래 키가 아닌 컬럼으로 포함하는 경우 EF는 일반적으로, 중간 모델을 생성합니다.

    UserRole 테이블은 사용자 및 역할 테이블에 대한 외래 키가 아닌 컬럼으로 포함하는 경우 EF는 일반적으로, 중간 모델을 생성합니다.

    당신이 UserRoles 테이블에 단 2 열이 있다면 당신이 원하는 그래서, 사용자 및 역할 테이블에 모두 FKS (심지어 대리 키), EF는 모델을 만들 것입니다. 즉 원하는 동작의 자동 생성을 위해, 이동하는 방법 중 하나입니다 그래서 (중간 모델 제외). 테이블에 단 2 열이.

    이 테이블의 다른 키가 아닌 열 (데이터)이있는 경우, 그때 EF가 무엇을하고 있는지 정확합니다. 당신은 중간 엔티티가 필요합니다.

    그리고 당신은 더 이상 당신의 DB를 수정하지 않고 모델이 중간 테이블을 필요로하지 않는 키가 아닌 열이없는 경우에, 당신은 수동으로 OnModelCreating을 수정할 수있는 많은 - 투 지정 - 많은 및 중간 테이블을 숨 깁니다.

    여기서 모든 단계는 다음과 같습니다

    예를 들면 사용자 클래스,

    public virtual ICollection<Role> Roles { get; set; }
    

    및 사용자 생성자

    this.Roles = new HashSet<Role>();
    
    // on the OnModelCreating method, add this snippet
    modelBuilder.Entity<User>().HasMany<Role>(u => u.Roles)
                              .WithMany(r => r.Users)
                              .Map(ru => 
                                       {  
                                         ru.MapLeftKey("UserId");        
                                         ru.MapRightKey("RoleId"); 
                                         ru.ToTable("UserRole"); 
                                       });
    
  2. from https://stackoverflow.com/questions/35527175/entity-framework-database-first-many-to-many by cc-by-sa and MIT license