问题
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.
回答1:
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.
来源:https://stackoverflow.com/questions/16121083/many-to-many-without-an-inverse-property