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沒有任何關係(因此我爲什麼說它完全不相關)。 –