LINQ を使用してデータベースにレコードを挿入しています。これらのレコードを作成し、リストを使用してそれらを追跡します。いくつかのロジックに基づいて、リストから削除することでレコードの一部を削除します。(同じ DataContext オブジェクトを使用しています)。
データベースにレコードを挿入する場合は、対応する linq テーブルの InsertOnSubmit() に続いて、datacontext オブジェクトで SubmitChanges() を実行します。LINQ は、リストに存在するレコードと共に、リストから削除されたレコードも挿入します。
例:
//list to keep track of records to insert
List list
// add the records to list
list.add(some records)
//deleted last 2 records
list.remove()
//call InsertAllOnSubmit on the linq table passing the list object with records to insert
linqTable.InsertAllOnSubmit(list)
//call SubmitChanges on datacontext object
datacontext.SubmitChanges()
この msdn 記事Object States and Change-Tracking (LINQ to SQL) に出くわしました
InsertOnSubmit を使用して、挿入を明示的に要求できます。または、LINQ to SQLLINQ to SQL は、更新する必要がある既知のオブジェクトの 1 つに接続されているオブジェクトを見つけることによって、挿入を推測できます。たとえば、Untracked オブジェクトを EntitySet(TEntity) に追加するか、EntityRef(TEntity) を Untracked オブジェクトに設定すると、グラフ内の追跡対象オブジェクトを介して Untracked オブジェクトに到達できるようになります。SubmitChanges の処理中に、LINQ to SQLLINQ to SQL は追跡されたオブジェクトを走査し、追跡されていない到達可能な永続オブジェクトを検出します。このようなオブジェクトは、データベースへの挿入の候補です。
質問はこれに要約されると思います-削除されたオブジェクトの状態を「追跡なし」に変更するにはどうすればよいですか?
リストからオブジェクトを削除した後、DeleteOnSubmit を試しましたが、例外が発生しました (アタッチされていないエンティティを削除できません)。
誰かが私に解決策を教えてもらえますか? ありがとう。
LINQ のみを使用してこれを達成できるかどうかを知りたいです。(ストアド プロシージャを使用して、リストにレコードのみを挿入できることはわかっています。)