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();
}
上面的代码生成显示的架构,但是在SaveChanges()之后,表ProfileRooms不会填充ProfileRooms表。然后,如果随后查询,则列表为空白。有人发现我在做多对多映射时做错了什么?AddUserToRoom在管理器类中,该类保留数据库上下文的作用域,直到处置为止,因此在调用时上下文仍在作用域内。我还重写了Profile和Room的Equals()并对照ID进行相等性检查。
我显然缺少了一些东西。提前谢谢!
-更新-很抱歉,没有流利的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");
});
房间是从管理器中的其他dbcontext中检索到的。有一个静态函数可以检索房间,然后将其传递回去,并使用实例dbcontext来保存更改。自从写了静态方法以来,已经有一段时间了,我已经忘记了它。有趣的是没有错误,它只是经历了它而没有任何变化。当我使用传入的房间中的id从类实例上下文中检索它时,它就起作用了。
-互联网搜索者的其他信息-
我virtual
从集合中删除了关键字,还添加了一个类似的调用:
_DbContext.Entry(room).Collection("Members").Load();
在删除联接表中的项目之前。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句