Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Many-to-many without an inverse property

I want to create a many-to-many relationship in EF. Normally I would use the InverseProperty attribute, however, in this case:

Role ( Id, Name, ICollection<Privilege> )
Privilege ( Id, Name )

I don't have an inverse property. How to tell EF that a privilege may be used in more than one Role?

[ Currently EF puts a Role_Id column in the Privilege table. This is not what I want :-) ]

Edit: I do not want to use the Fluent API, I'm looking for an attribute.

like image 323
D.R. Avatar asked Jan 25 '26 03:01

D.R.


1 Answers

modelBuilder.Entity<Role>()
    .HasMany(r => r.Privileges)
    .WithMany() // <- no parameter = no inverse property
    .Map(m =>
    {
        m.ToTable("RolePrivileges");
        m.MapLeftKey("RoleId");
        m.MapRightKey("PrivilegeId");
    });

I have seen that you don't want Fluent API, but it is not possible with data annotations. Mapping options with annotations are only a subset of the options with Fluent API and this is a case where a mapping option with data annotations is missing. You need Fluent API here.

like image 131
Slauma Avatar answered Jan 26 '26 17:01

Slauma