1
今天早上我偶然發現了Entity Framework的一個問題。實體框架 - 多對多關係不保存到數據庫
我有以下代碼映射修改的實體並將其保存到數據庫中。
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;
}
}
我打電話給現有組的Save方法作爲參數。組包含一個我想添加爲用戶的用戶。
該方法成功完成,但該關係不會在數據庫中保留。 任何幫助非常感謝。
編輯:這是我的班
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; }
}
...
}
EDIT2:這是保存方法被稱爲
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;
}
EDIT3:我的映射器
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);
}
}
}
映射器的其餘部分是一樣的,只用自己的表。
對不起,我可能沒有清楚描述我的問題。未映射的關係是類User和Group之間的M:N關係。我用上述類的代碼編輯了我的原始文章。組的成員包含我想成爲成員的用戶(x)。 – Folio
我明白了..你什麼時候將用戶對象添加到組中?這是否會發生,然後該對象是ser/deser? –
使用ef從數據庫中獲取用戶和組對象,然後將用戶添加到組中,並將該組用作我在我的問題中發佈的Save方法中的參數。這些對象不是反序列化的。 – Folio