c# - Entity Framework 6 Code First 查找表未填充

标签 c# asp.net-mvc entity-framework entity-framework-6

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

enter image description here

上面的代码生成了显示的架构,但是表 ProfileRooms 并没有在 SaveChanges() 之后填充 ProfileRooms 表。然后如果之后查询列表是空白的。有人发现我在多对多映射方面做错了吗? AddUserToRoom 位于一个管理器类中,该类在处理之前保持数据库上下文的范围,因此在调用时上下文仍在范围内。我还覆盖了 Profile 和 Room 的 Equals() 并检查 ID 是否相等。

  • .NET 4.5
  • MVC 5 项目
  • IDE 与 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 关键字,还添加了对 like 的调用:

_DbContext.Entry(room).Collection("Members").Load();

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

关于c# - Entity Framework 6 Code First 查找表未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36191666/

相关文章:

.net - Entity Framework 和连接池

php - Doctrine2 - 关系取决于参数

c# - 如何在不使用额外内存的情况下连接列表?

c# - 是否可以在 MonoTouch 中访问 NSURLCache?

c# - 使用 WCF 服务

c# - 在 Web API 使用的域项目中实现服务缓存

css - 英文数字在 asp 网站中显示为波斯语

c# - C#中的自顶向下解析实现

asp.net - 隐藏 Kendo UI DatePicker 文本框

c# - Entity Framework - 保存引用新记录的外键