C# 实体框架6代码第一查找表未填充 公共类配置文件 { 公共int Id{get;set;} //... 公共虚拟列表室{get;set;} } 公共教室 { 公共int Id{get;set;} //... 公共虚拟列表成员{get;set;} } 公共void AddUserToRoom(配置文件用户,房间) { room.Members.Add(用户); user.Rooms.Add(房间); _DBContext.SaveChanges(); }

C# 实体框架6代码第一查找表未填充 公共类配置文件 { 公共int Id{get;set;} //... 公共虚拟列表室{get;set;} } 公共教室 { 公共int Id{get;set;} //... 公共虚拟列表成员{get;set;} } 公共void AddUserToRoom(配置文件用户,房间) { room.Members.Add(用户); user.Rooms.Add(房间); _DBContext.SaveChanges(); },c#,asp.net-mvc,entity-framework,entity-framework-6,C#,Asp.net Mvc,Entity Framework,Entity Framework 6,上面的代码生成显示的架构,但在SaveChanges()之后,ProfileRooms表不会填充ProfileRooms表。如果随后查询,则列表为空。有人知道我在多对多映射中做错了什么吗?AddUserToRoom位于一个管理器类中,该类在dispose之前保留数据库上下文的作用域,因此在调用时上下文仍在作用域中。我还覆盖了Profile和Room的Equals(),并对照ID检查是否相等 .NET 4.5 MVC5项目 IDE VS 2013 我显然错过了什么。提前谢谢 --更新-- 抱歉

上面的代码生成显示的架构,但在SaveChanges()之后,ProfileRooms表不会填充ProfileRooms表。如果随后查询,则列表为空。有人知道我在多对多映射中做错了什么吗?AddUserToRoom位于一个管理器类中,该类在dispose之前保留数据库上下文的作用域,因此在调用时上下文仍在作用域中。我还覆盖了Profile和Room的Equals(),并对照ID检查是否相等

  • .NET 4.5
  • MVC5项目
  • IDE VS 2013
我显然错过了什么。提前谢谢

--更新-- 抱歉,遗漏了fluent api调用,这可能是故障所在:

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();
}
modelBuilder.Entity()
.HasMany(e=>e.Members)
.有许多(a=>a.房间)
.Map(mc=>
{
mc.ToTable(“房间成员”);
mc.MapLeftKey(“室友”);
mc.MapRightKey(“成员ID”);
});
modelBuilder.Entity()
.HasMany(e=>e.Rooms)
.WithMany(a=>a.Members)
.Map(mc=>
{
mc.ToTable(“房间成员”);
MapLeftKey mc(“成员ID”);
mc.MapRightKey(“室友”);
});
解决方案 该文件室是从manager中的不同dbcontext中检索的。有一个静态函数来检索文件室,然后将其传回,并使用实例dbcontext保存更改。静态方法编写已经有一段时间了,我已经忘记了它。有趣的是,没有错误,只是没有任何变化。当我使用传入文件室中的id从类实例上下文中检索它时,它起了作用

--互联网搜索者的附加信息--

我从集合中删除了
virtual
关键字,还添加了对like的调用:

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

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

在将
用户
房间
相互关联之前,它们是否已存在于数据库中?是的,在AddUserToRoom()调用之前,配置文件实例和房间实例已存在于数据库中。发布映射类是否可以显示外键或fluent api。像这样似乎没有关系。
_DbContext.Entry(room).Collection("Members").Load();