次のような 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 オブジェクトへの参照です。