[英]Seeding large lookup table data with Entity Framework Code First migrations
[英]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進行相等性檢查。
我顯然缺少了一些東西。 提前謝謝!
-更新-很抱歉,沒有流利的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.