实体框架 - 多对多关系未保存到数据库
本文关键字:保存 数据库 框架 实体 关系 | 更新日期: 2023-09-27 18:34:49
我今天早上偶然发现了实体框架的问题。
我有以下代码映射修改后的实体并将其保存到数据库中。
public Group Save(Group x)
{
using (var db = new HostContext())
{
db.Projects.Attach(x.Project);
if (x.ID != 0)
{
db.AttachableObjects.Attach(x);
var manager = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager;
manager.ChangeObjectState(x, EntityState.Modified);
}
else
{
db.AttachableObjects.Add(x);
}
db.SaveChanges();
return x;
}
}
我调用保存方法,将现有组作为参数。组包含一个我要添加为成员的用户。
该方法成功完成,但关系不会保留在数据库中。任何帮助都非常感谢。
编辑:这些是我的课程
class User : AttachableObject
{
...
private List<Group> memberof;
[DataMember]
[InverseProperty("Members")]
public List<Group> MemberOf
{
get { return memberof; }
set { memberof = value; }
}
...
}
class Group : AttachableObject
{
...
private List<User> members;
[DataMember]
[InverseProperty("MemberOf")]
public List<User> Members
{
get { return members; }
set { members = value; }
}
...
}
编辑2:这是调用保存方法的地方
public Group AcceptInvite(int id)
{
var mapper = new InviteMapper();
var userMapper = new UserMapper();
var groupMapper = new GroupMapper();
var invite = mapper.Find(id);
if (invite != null)
{
var group = groupMapper.Find(invite.GroupID);
var user = userMapper.Find(invite.InviteeID);
group.Members.Add(user);
mapper.Delete(invite.ID);
return groupMapper.Save(group);
}
return null;
}
编辑3:我的映射器
public class GroupMapper
{
public Group Find(int id)
{
using (var db = new HostContext())
{
return db.AttachableObjects
.Include("Project")
.OfType<Group>().FirstOrDefault(x => x.ID == id);
}
}
}
其余的映射器是相同的,只是使用自己的表。
您没有更改Project
的关系信息,您只是将x
设置为已修改,必须明确更改关系信息。
所以x.Project
必须有一些指向Group
的属性,你需要设置它,以便记录更改。
我猜x
是通过一些反序列化过程复活的?