public class Profile
{
public int Id { get; set; }
//...
public virtual List<Room> Rooms { get; set; }
}
public class Room
{
public int Id { get; set; }
//...
public virtual List<Profile> Members { get; set; }
}
public void AddUserToRoom(Profile user, Room room)
{
room.Members.Add(user);
user.Rooms.Add(room);
_DBContext.SaveChanges();
}
上面的代码生成了显示的模式,但是表格ProfileRooms在SaveChanges()之后没有填充ProfileRooms表。然后,如果之后查询,则列表为空。有人抓住了我为多对多映射做错的事情? AddUserToRoom位于一个管理器类中,该类保存数据库上下文的范围直到dispose,因此在调用时上下文仍在范围内。我还覆盖了Profile和Room的Equals(),并检查ID是否相等。
我显然错过了一些东西。提前谢谢!
- Updated-- 对不起,遗漏了流畅的api电话,这可能就是故障所在:
modelBuilder.Entity<Room>()
.HasMany(e => e.Members)
.WithMany(a => a.Rooms)
.Map(mc =>
{
mc.ToTable("RoomMembers");
mc.MapLeftKey("RoomId");
mc.MapRightKey("MemberId");
});
modelBuilder.Entity<Profile>()
.HasMany(e => e.Rooms)
.WithMany(a => a.Members)
.Map(mc =>
{
mc.ToTable("RoomMembers");
mc.MapLeftKey("MemberId");
mc.MapRightKey("RoomId");
});
答案 0 :(得分:0)
从经理中的不同dbcontext检索房间。有一个静态函数来检索房间,然后将其传回,并使用实例dbcontext来保存更改。自静态方法编写以来我已经忘记了它已经有一段时间了。有趣的是没有任何错误,它只是通过它没有任何变化。当我使用传入房间中的id从类实例上下文中检索它时,它可以工作。
- 互联网搜索者的其他信息 -
我从集合中删除了virtual
关键字,并添加了一个名为:
_DbContext.Entry(room).Collection("Members").Load();
删除连接表中的项目之前。