.net 实体框架-一对多关系返回的记录数不正确
“用户”实体在“组成员”实体上具有一对多关系 在UserDbContext类中,我设置了如下关系:.net 实体框架-一对多关系返回的记录数不正确,.net,entity-framework,entity-framework-core,.net,Entity Framework,Entity Framework Core,“用户”实体在“组成员”实体上具有一对多关系 在UserDbContext类中,我设置了如下关系: protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<GroupMember>() .HasKey(x => x.UserId); modelBuilder.Entity<GroupMember>()
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<GroupMember>()
.HasKey(x => x.UserId);
modelBuilder.Entity<GroupMember>()
.HasOne(x => x.User)
.WithMany(x => x.GroupMembers)
.HasForeignKey(x => x.UserId);
}
“GroupMembers”字段应包含七条记录。查询结果是“GroupMembers”字段的一条记录
我不明白为什么我没有得到关系的正确记录计数。使用这个流畅的API
modelBuilder.Entity<GroupMember>()
.HasKey(x => x.UserId);
如果要映射到现有数据库,这就足够了(因为您希望查询中有多条记录,因此您知道该表存在并且每个用户都包含多条记录,如果UserId
是唯一的,这是不可能的)
但是,如果您在迁移中使用代码优先的方法,请确保在完成上述更改后创建并应用新的迁移。请不要自己创建/设置DBContext。请使用Scaffold Dbcontext命令为您自动生成Dbcontext
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
非常感谢你帮助我理解这个问题。
var user = _dbContext.Users
.Include(u => u.Profiles)
.Include(u => u.GroupMembers)
.ThenInclude(gm => gm.Group)
.Where(u => u.Id == id)
.Select(u => u)
.SingleOrDefault();
modelBuilder.Entity<GroupMember>()
.HasKey(x => x.UserId);
modelBuilder.Entity<GroupMember>()
.HasKey(x => new { x.GroupId, x.UserId });
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models