EF Core 2.0 Identity - Adding navigation properties

后端 未结 3 1266
面向向阳花
面向向阳花 2021-01-02 21:58

In EF Core 2.0 Identity navigation properties are not included by default, so after upgrading, I added them. So for Many-To-Many relationship between User and Role, and One

3条回答
  •  余生分开走
    2021-01-02 22:39

    I encountered with same issue and this is solution.

    You have to tell Ef on which navigation property you are going to have OneToMany Relation.

    protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
    
    
            CreateUserModel(modelBuilder.Entity());
            CreateRoleModel(modelBuilder.Entity());
    
        }
    
    
        private void CreateRoleModel(EntityTypeBuilder entityTypeBuilder)
        {
            entityTypeBuilder.HasMany(role => role.UserRoles).
                WithOne(**e=> e.Role**).
                HasForeignKey(userRole => userRole.RoleId).
                IsRequired()
                .OnDelete(DeleteBehavior.Cascade);
        }
    
        private void CreateUserModel(EntityTypeBuilder entityTypeBuilder)
        {
            entityTypeBuilder.HasMany(user => user.UserRoles).
                WithOne(**e=>e.User**).
                HasForeignKey(userRole => userRole.UserId).
                IsRequired()
                .OnDelete(DeleteBehavior.Cascade);
        }
    

    You can Also specify navigation property in string like

    private void CreateRoleModel(EntityTypeBuilder entityTypeBuilder)
        {
            entityTypeBuilder.HasMany(role => role.UserRoles).
                WithOne(**"Role"**).
                HasForeignKey(userRole => userRole.RoleId).
                IsRequired()
                .OnDelete(DeleteBehavior.Cascade);
        }
    
        private void CreateUserModel(EntityTypeBuilder entityTypeBuilder)
        {
            entityTypeBuilder.HasMany(user => user.UserRoles).
                WithOne(**"User"**).
                HasForeignKey(userRole => userRole.UserId).
                IsRequired()
                .OnDelete(DeleteBehavior.Cascade);
        }
    

提交回复
热议问题