2014-12-19 87 views
2

我需要向現有父級添加子記錄。實體框架:將子記錄添加到現有父級

我調用以下方法

_handler.Update(custOrder); 
_handler.Save(); 


public TEntity Update(TEntity entity) 
     { 
      Entities.Attach(entity); 
      DataContext.Entry(entity).State = EntityState.Modified; 
      return entity; 
     } 

public void Save() { 
      try 
      { 
       base.SaveChanges(); 
      } 
      catch (Exception e) { } 
     } 

的custOrder包含父(已經存在),並且需要添加一個新的子記錄。例如。爲現有訂單添加訂單項目。

但是,當我執行這個孩子不會被添加。

我不知道如何指定父並沒有改變,但孩子加入

請指點。

+0

您是否在相同的上下文中執行'Update'和'Save'? – IronMan84

+0

是的,我使用保存保存多個交易,當我添加一個新的訂單項目 – DafaDil

+0

時,它工作正常這不是我的意思。你在'Update'方法中使用的'DataContext':是否在'Save'上運行相同的上下文? – IronMan84

回答

1

我終於得到了答案,這是一個有點微妙不得不承認,要添加所需的母公司,而不是附着事後修改設定的狀態中。

public TEntity Update(TEntity entity) 
     { 
      Entities.Add(entity); 
      DataContext.Entry(entity).State = EntityState.Modified; 
      return entity; 
     } 
+0

很好的答案!爲什麼有人降低了它?它完美的作品。 –

2

您需要告訴EF該孩子本身實際上已被添加。當EntityState設置爲Modified時,它不會從父級假定需要添加某些內容。您需要將該新的子記錄添加到上下文,然後運行保存。

假設OrderItem類作爲您的孩子:

dbContext.OrderItems.Add(myNewOrderItem); 
dbContext.SaveChanges(); 
+0

我可以使用這些方法(修改Update方法)來做到這一點,否則我需要引入什麼。 – DafaDil

+0

我可以用通用的方式來做它,以便它可以處理任何類型的父子對象嗎? – DafaDil

+0

你應該能夠,但是除非我更瞭解你目前是如何做你的其他人,我不知道如何幫助你。 – IronMan84

相關問題