簡體   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