2014-01-20 107 views
1

當我們使用Entity框架同時插入多個行時,最好逐個添加這些對象,然後在最後提交,而不是每次添加和合並。實體框架在foreach中獲取多個插入的ID

那麼在那種情況下,如何獲得這些插入的ID?

例子:

 foreach (var item in list) 
     { 
      Subscription subscription = new Subscription(); 

      subscription.Amount = item.ItemTotal; 
      this.ClientRepositories.LiveData.AddToSubscriptions(subscription); 
// LiveData is db context via webservice proxy 
      // how to get IDS of these insertions if you do not commit each time? 

      int id = subscription.Id; 
someOtherOperation(id); //i need to insert ID for each row that was inserted 

     } 

     this.ClientRepositories.LiveData.SaveChanges(); 

如果我使用提交內部的各個它增加了新的對象,我可以很容易地得到最新的插入的ID的時間,但它不是好每次向多行,我聽到提交。

+1

即使你在同一時間添加了一堆,ID字段,如果你的實體應保存到數據庫後進行更新。如果你的實體之間有適當的導航屬性,你可以插入到多個表中,在一次提交中直接引用實體而不是id。 – ESG

+0

你可以給你兩個表的名字和他們的關係。 –

回答

2

我假設你正在使用自動遞增的ID。我認爲你將不得不在你的循環之外保留你的訂閱對象列表。在每次循環迭代期間,將當前訂閱添加到列表中。在執行'SaveChanges();'之後訂閱ID將自動添加。

應該是這樣的:

  List<Subscription> subList = new List<Subscription>(); 
      foreach (var item in list) 
      { 
       Subscription subscription = new Subscription(); 

       subscription.Amount = item.ItemTotal; 
       this.ClientRepositories.LiveData.AddToSubscriptions(subscription); 
       subList.add(subscription); 

      } 

      this.ClientRepositories.LiveData.SaveChanges(); 
      /* At this point, each Subscription in your 'subList' should have an id */ 
+0

我在想這件事,但是在實體中是不是有更好的方法來實現呢?我實際上是同時在多個表中插入多個記錄,這就是爲什麼我需要這些ID。 –

+0

嗯不是我所知道的。 – tier1