我有两个实体Parent
和Child
,在客户端创建Parent
,然后调用context.submitChanges
在InsertParent(Parent parent)
我做的服务器端:
InsertParent(Parent parent)
{
Child child = this.ObjectContext.Childs.CreateObject();
parent.child = child;
if ((parent.EntityState != EntityState.Detached))
{
this.ObjectContext.ObjectStateManager.ChangeObjectState(parent, EntityState.Added);
}
else
{
this.ObjectContext.Parents.AddObject(parent);
}
}
现在我有两个问题。
在if else之前,Parent.id
为0且在其仍为0之后,但在数据库中已填充。
另一个是,Child
已保存但Child.ParentId
为0。
我不明白为什么。
实现这种行为的正确方法是什么?我应该直接在上下文中调用SaveChanges()
吗?
答案 0 :(得分:1)
检查以确保edmx中Parent.Id上的StoreGeneratedPattern属性设置为Identity。这应该确保它在插入时使用新值进行更新。
我还将它包装在一个事务中,以便您可以在设置父ID后添加您的孩子。
using(var scope = new TransactionScope()){
ObjectContext.Parents.AddObject(parent);
ObjectContext.SaveChanges(); //parent.id assigned
parent.child = ObjectContext.Child.CreateObject();
ObjectContext.SaveChanges();
scope.Complete(); // commit transaction
}
答案 1 :(得分:0)
是的,您应该使用 SaveChanges(),因为这是将数据保存到数据库中的原因。
您还需要检查parents.Id列和childs Id列,它们被设置为标识和主键,以及两个表之间的关系。