2014-12-19 49 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