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
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);
}