Entity framework 在EF代码中,三个实体能否共享同一个连接表?

Entity framework 在EF代码中,三个实体能否共享同一个连接表?,entity-framework,ef-code-first,Entity Framework,Ef Code First,在以下情况下,实体框架代码会首先错误命名/重命名连接表或联接表 public class User () { //all fields from Users table //... //Role collection from Roles table through UserRoleLinks table public List<Role> Roles { get; set; } } public class AppUser() { //subset of fields

在以下情况下,实体框架代码会首先错误命名/重命名连接表或联接表

public class User () {
 //all fields from Users table
 //...
 //Role collection from Roles table through UserRoleLinks table
 public List<Role> Roles { get; set; }
} 

public class AppUser() {
 //subset of fields from Users through AppUsers View
 //...
 //Role collection from Roles table through UserRoleLinks table
 public List<Role> Roles { get; set; }
}
在运行时,我在尝试使用AppUsers数据库集时遇到以下错误

无效的对象名 “dbo.UserRoleLinks1”。无效对象 名称为“dbo.UserRoleLinks1”

代码优先配置似乎正在增加联接表名称,因为已经存在一个联接表名称


我怎样才能让它工作?有没有更好的方法来获取表列的子集?

我认为这在EF中根本不可能,不仅仅是在代码中。在证明这在EDMX中是可能的之前,没有理由先在代码中尝试它

这里的问题是AppUser是EF的新实体。现在,用户角色和AppUser角色之间有了M:N关系,并且希望将这两个M:N关系映射到同一个连接表中。因为EF并没有看到AppUser实际上是用户表顶部的唯一视图/查询,所以它可能会将其标记为无效映射

若您仅使用AppUser获取列的子集,请改用linq查询中的投影到自定义类型

this.HasMany(e => e.Roles)
    .WithMany().Map(m => {
        m.MapLeftKey(a => a.Id, "Users_Id");
        m.MapRightKey(b => b.Id, "Roles_Id");
        m.ToTable("UserRoleLinks");
});