1

次のような Article オブジェクトの配列を返す LinqToSql クエリがあります。

return db.Articles.ToArray();

次に、この配列をループして、特定の基準を満たすいくつかの項目の削除を開始します。簡単にするために、次のようにすべての項目を削除するとします。

foreach (var item in array) 
    db.articles.DeleteOnSubmit(item); 

DeleteOnSubmit(entity) を呼び出すと、無効な操作の例外がスローされます。そのメッセージには、「関連付けられていないエンティティを削除できません」というメッセージが表示されます。最初にエンティティを取得してから削除するようにコードを変更したところ、問題なく動作しました。作業コードは次のとおりです。

db.DeleteOnSubmit(db.Articles.Where(c=>c.Id == item.Id))

さて、ネイティブ配列の代わりに IQueryable を返すようにリポジトリを変更した場合に機能することはわかっていますが、理由がわかりません。ToArray は、この無効な操作の例外と関係がありますか?
ありがとう。
ps: db は DataContext オブジェクトへの参照です。

4

2 に答える 2

1

すべてを 1 つの方法にまとめて試すことはできますか?

答えは「いいえ」です。

select とは異なる db を delete に使用していない限り (気付かないうちに発生する可能性があります)、または db.ObjectTrackingEnabled がどこかで false に設定されています。

于 2009-10-26T12:05:14.787 に答える
1

エンティティを選択するときと変更を送信するときに、異なる DataContext を使用していると思われます。IQueryableこの場合、エラーは自然であり、ネイティブの代わりにを返した場合でも発生しますarray。エンティティを新しいデータ コンテキストに追加するかAttach、最初のエンティティを選択した場所と同じものを使用します。

于 2009-10-26T10:40:10.300 に答える