在域服务插入方法中添加实体

时间:2011-09-22 21:06:46

标签: entity-framework wcf-ria-services domainservices

我有两个实体ParentChild,在客户端创建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()吗?

2 个答案:

答案 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(),因为这是将数据保存到数据库中的原因。

Very Easy Example

您还需要检查parents.Id列和childs Id列,它们被设置为标识和主键,以及两个表之间的关系。