3

使用するときに、変更をコミットせずに dataContext にオブジェクトを追加する方法はありますか

ctx.Articles.AddObject(newart);

これはコンテキストにnewart 表示されませんctx。私ができる唯一の方法は、ctx.SaveChanges変更を保存することです。残念ながら、変更をDBに保存することです。そうしたくありません。それを行う方法はありますか。感謝される

4

1 に答える 1

4

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ます(以前のクエリによってロードされたオブジェクトと一緒に)

于 2012-12-09T12:04:28.460 に答える