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");
});