2017-05-09 23 views
2

目前我正試圖在我的datacontext.savechanges()方法之前實現代碼,該方法從數據上下文中分離出特定類型的所有對象,以便它們不會被插入到數據庫中。我知道你可以調用dbContext.Entry(entity).State = EntityState.Detached來分離單個實體,但是有沒有辦法從上下文中分離出特定類型的所有對象?實體框架如何從數據上下文中分離出特定類型的所有對象?

編輯:我實現什麼標記C建議和彙編,但我得到一個無效的操作異常,當我嘗試執行代碼:

的實體類型DbEntityEntry是不是模型當前的一部分 上下文。

foreach (System.Data.Entity.Infrastructure.DbEntityEntry dbEntityEntry in this.dataContext.ChangeTracker.Entries<Customer>()) 
      { 
       if (dbEntityEntry != null && dbEntityEntry.State != System.Data.Entity.EntityState.Modified && dbEntityEntry.State != System.Data.Entity.EntityState.Unchanged) 
       { 
        dataContext.Entry(dbEntityEntry).State = System.Data.Entity.EntityState.Detached; 
       } 
      } 

編輯#2:更加仔細看後,我犯了一個錯誤。看來需要在DBEntityEntry上指定實體。用下面的變化它的工作原理:

 foreach (System.Data.Entity.Infrastructure.DbEntityEntry dbEntityEntry in this.dataContext.ChangeTracker.Entries<Customer>()) 
     { 
      if (dbEntityEntry.Entity != null && dbEntityEntry.State != System.Data.Entity.EntityState.Modified && dbEntityEntry.State != System.Data.Entity.EntityState.Unchanged) 
      { 
       dataContext.Entry(dbEntityEntry.Entity).State = System.Data.Entity.EntityState.Unchanged; 
      } 
     } 

感謝格特對建議使用EntityState.Unchanged代替EntityState.Detached。

+0

不知道你應該* *分離他們。您可能希望將它們標記爲「未更改」,因爲將它們分開也可能會破壞關聯。 –

回答

2

你可以寫類似

foreach (DbEntityEntry dbEntityEntry in this.ChangeTracker.Entries()) 
      { 
       if (dbEntityEntry.Entity != null) 
       { 
        // Here you can look at typeof and the EntityState 
       } 
      } 

感謝KeithS的指出你也可以使用重載ChangeTracker.Entries()使用特定的實體類型。

this.ChangeTracker.Entries<SomeEntityEntity>()

+0

我唯一的建議是使用條目的泛型重載來使它具有類型特定性。雖然答案很好。 – KeithS

+0

@KeithS謝謝 - 編輯我的答案! –

+0

我嘗試了你的建議並編譯了它,但是當我運行代碼時,我得到一個InvalidOperationException:實體類型DbEntityEntry不是當前上下文的模型的一部分。檢查我原來的問題,我正在使用的代碼。 – Stephen

相關問題