繁体   English   中英

实体框架6代码优先查找表未填充

[英]Entity Framework 6 Code First lookup table not populating

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进行相等性检查。

  • .NET 4.5
  • MVC 5项目
  • IDE VS 2013

我显然缺少了一些东西。 提前谢谢!

-更新-很抱歉,没有流利的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();

在删除联接表中的项目之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM