使用するときに、変更をコミットせずに dataContext にオブジェクトを追加する方法はありますか
ctx.Articles.AddObject(newart);
これはコンテキストにnewart
表示されませんctx
。私ができる唯一の方法は、ctx.SaveChanges
変更を保存することです。残念ながら、変更をDBに保存することです。そうしたくありません。それを行う方法はありますか。感謝される
使用するときに、変更をコミットせずに dataContext にオブジェクトを追加する方法はありますか
ctx.Articles.AddObject(newart);
これはコンテキストにnewart
表示されませんctx
。私ができる唯一の方法は、ctx.SaveChanges
変更を保存することです。残念ながら、変更をDBに保存することです。そうしたくありません。それを行う方法はありますか。感謝される
EF4で動作する可能性があります
ObjectStateManager
あなたはあなたのObjectContext
好きなものを介して現在追跡されているすべてのオブジェクトを取得できるはずです
var articles = ctx.ObjectStateManager
// Get all entries for added/changed/modified entities
.GetObjectStateEntries(EntityState.Added |
EntityState.Unchanged |
EntityState.Modified)
// select the entity objects from the entries
.Select(entry=>entry.Entity)
// we're only interested in Article objects
.OfType<Article>();
注:EF4をインストールしていないため、このソリューションを検証できませんでした。しかし、私はこれを少し前にうまくやったことを暗く覚えています:)。ただし、非常に大きなオブジェクトセットを使用すると、パフォーマンスが低下する可能性があります...
EF5で動作します
クラスのLocal
プロパティを使用できます。DbSet
このプロパティは、コンテキストによって現在追跡されているオブジェクト(つまり、現在ロードされている、および/または削除されずにローカルに追加されているすべてのオブジェクト)を表します。プロパティにアクセスしてLocal
も、DBクエリは実行されません。
したがってctx.Articles.Local
、オブジェクトを含むデータセットを使用して取得できnewart
ます(以前のクエリによってロードされたオブジェクトと一緒に)