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