2017-05-09 7 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でエンティティを指定する必要があるようです。次の変更で、それは動作します:EntityState.Unchanged代わりのEntityState.Detachedを使用して推薦するゲルトへ

 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; 
      } 
     } 

感謝を。

+0

デタッチ*する必要があるかどうかわかりません。それらを切り離すと関連付けが損なわれる可能性があるため、おそらくそれらを「変更なし」とマークすることをお勧めします。 –

答えて

2

あなたはまた、特定のエンティティタイプを使用するためのChangeTracker.Entries()のためのオーバーロードを使用できることを指摘しKeithSため

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

おかげのようなものを書くことができます。

this.ChangeTracker.Entries<SomeEntityEntity>()

+0

私は、タイプ固有のものにするためにエントリーの一般的なオーバーロードを使うことを提案します。しかし、良い答え。 – KeithS

+0

@KeithSありがとう - 私の答えを編集! –

+0

私はあなたが示唆したものを試してコンパイルしましたが、コードを実行するとInvalidOperationExceptionが発生します。エンティティタイプDbEntityEntryは、現在のコンテキストのモデルの一部ではありません。私が使用しているコードについて私の元の質問をチェックしてください。 – Stephen

関連する問題