I have two classes
class Role
{
string Id { get; set; }
string Name { get; set; }
}
class Permission
{
string Id { get; set; }
string Name { get; set; }
}
I want to create a table for assign multiple permission to a role
class RoleAssignedPermissions
{
string Id { get; set; }
Role Role { get; set; }
ICollection<Permission> Permissions { get; set; }
}
In OnModelCreating I have:
modelBuilder.Entity<Role>(entity =>
{
entity.HasKey(x => x.Id);
});
modelBuilder.Entity<Permission>(entity =>
{
entity.HasKey(x => x.Id);
});
modelBuilder.Entity<RoleAssignedPermissions>(entity =>
{
entity.HasKey(x => x.Id);
entity.HasOne(x => x.Role);
entity.HasMany(x => x.Permissions);
});
In this case is by adding a migration are generated three tables, roles table is ok with id and name
But Permissions instead of id and name, appear new column RoleAssignedPermissionsId, and in table RoleAssignedPermissions id and roleId
But should be in RoleAssignedPermissions a column for collection of Permissions
CodePudding user response:
Here are the entities. You can do like this
class Role
{
string Id { get; set; }
string Name { get; set; }
public virtual ICollection<Permission> Permissions {get; set;}
}
class Permission
{
string Id { get; set; }
string Name { get; set; }
[ForeignKey("Role")]
public string RoleId {get; set;}
public virtual Role Role {get; set;}
}
CodePudding user response:
public class Role
{
string Id { get; set; }
string Name { get; set; }
public virtual ICollection<Permission> Permissions {get; set;}
}
public class Permission
{
string Id { get; set; }
string Name { get; set; }
public string RoleId {get; set;}
public virtual Role Role {get; set;}
}
public class RoleConfiguration : IEntityTypeConfiguration<Role>{
public void Configure(EntityTypeBuilder<Role> builder)
{
builder.HasMany(p => p.Permissions).WithOne(p => .Role).HasForeignKey(p => p.RoleId );
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new RoleConfiguration ());
}
