0
我有以下实体:为什么为参与M:M关系的实体生成额外列?
public class User
{
public virtual ICollection<Role> Roles { get; set; }
}
public class Role
{
public virtual ICollection<User> Users { get; set; }
}
而下面的代码MyContext.OnModelCreating
:
mb.Conventions.Remove<OneToManyCascadeDeleteConvention>();
mb.Entity<T>().ToTable("Users", "myschema");
mb.Entity<T>().ToTable("Roles", "myschema");
mb.Entity<User>().HasMany(x => x.Roles).WithMany().Map(a => a.ToTable("UsersRoles", "myschema"));
mb.Entity<Role>().HasMany(x => x.Permissions).WithMany().Map(a => a.ToTable("RolesPermissions", "myschema"));
所有其他公约是默认的。在数据库初始化,用户表有一个外键列ROLE_ID。 这没有意义。该用户,角色,并UsersRoles表是正确的,否则。
在使用EF的User.Role_Id总是NULL和交易成功,UsersRoles按预期进行更新。如果我删除该列,EF无法投诉。
为什么EF这样做的,我怎么能解决这个问题 - 最好是在去除不需要的列?
在完全不相关的注释,数据库表中的单数形式,而不是多个通常称为(即'User'和'Role'而非'Users'和'Roles')。 –
@DJKRAZE:不,这只是一个数据库设计习惯用法;它与EF没有任何关系(因此我为什么说它完全不相关)。 –