0

我有两个实体,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()上下文吗?

4

2 回答 2

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
}
于 2011-09-22T21:39:05.180 回答
0

是的,您应该使用SaveChanges(),因为这就是将您的数据保存到数据库中的原因。

非常简单的例子

您还需要检查 parents.Id 列和 childs Id 列是否设置为身份和主键,以及两个表之间的关系。

于 2011-09-22T21:16:47.933 回答