2014-12-19 47 views
2

我想使用GraphDiff将分离的实体插入到数据库中。插入实体不会更新密钥字段

它去是这样的:

public IHttpActionResult Post([FromBody] Foo foo) { 
    var newFoo = fooBusiness.AddObject(foo); 
    if (newFoo != null) { 
     return CreatedAtRoute("GetOperation", new { id = newFoo.Id }, newFoo); 
    } 
    return Conflict(); 
} 

而且我addObject功能主要是:

public Foo AddObject(Foo entity) 
{ 
    UpdateGraph(entity); 
    _context.SaveChanges(); 
    return entity; 
} 

public override void UpdateGraph(Foo entity) 
{ 
    DataContext.UpdateGraph(entity, map => map 
     .AssociatedCollection(e => e.Bars) 
     .AssociatedEntity(e => e.Baz) 
    ); 
} 

问题是当我试图让新加入美孚的ID,它仍然是空的(0) 。

EF不应该更新它实际插入数据库中的对象吗?我错过了什么吗?

回答

3

好吧,我找到了正确的张贴疑问,UpdateGraph有一个返回类型之前,我没有使用它..

如果不使用返回的实体,状态会很好地更新实体,但实体跟踪将完全失败。

更改我的AddObject这解决了这个问题:

public Foo AddObject(Foo entity) 
{ 
    entity = UpdateGraph(entity); 
    _context.SaveChanges(); 
    return entity; 
} 

public override Foo UpdateGraph(Foo entity) 
{ 
    return DataContext.UpdateGraph(entity, map => map 
     .AssociatedCollection(e => e.Bars) 
     .AssociatedEntity(e => e.Baz) 
    ); 
} 
+0

你应该接受你自己的答案让人们知道它的解决。 – 2014-12-19 10:57:53

+0

@RaduPascal我会接受自我回答的2天期限结束:) – 2014-12-19 11:04:43

+1

对不起,没有意识到这一点。 – 2014-12-19 11:05:07