私はEF.ExtendedでEF 6.1を使用しており、次のことを実行しようとしています:
if (allRevisions != null && allRevisions.Any(r => r.Item.Id == itemId))
allRevisions.Where(r => r.Item.Id == itemId).Delete();
allRevisions
DbSet<Revision>
私の現在のものですDbContext
(このコードは一般的なヘルパーメソッドの中にあります)。
これを実行すると、次の例外が発生します。
シーケンスに一致する要素が含まれていません。
一致するリビジョンがあり、これAny
も真であるため、これは正しくありません。
さらに、次を実行すると正常に動作します。
if (allRevisions != null && allRevisions.Any(r => r.Item.Id == itemId))
{
foreach (var revision in allRevisions.Where(r => r.Item.Id == itemId))
allRevisions.Remove(revision);
}
しかし、これはまさに EF.Extended で回避できるはずの方法です。
私は何か間違ったことをしていますか、それともこれは EF.Extended のバグですか?
PS:これAny
は無意味であることはわかっています。最初にエラーが発生した後に削除するリビジョンがあることを確認するために追加しました。私の開発マシンでは誰もDBにアクセスしていないため、競合状態もありません。
Better to materialize the query then check if it has items and delete those you need to delete all in memory.
=>しかし、それはまさに私が避けたいことです(そしてEF.Extenedが適していること)。何かが変更されたかどうかは実際には気にしません-DBのようDELETE from Revisions WHERE Item_Id = @Id;
にクエリを実行するだけだと思います。
更新:
問題を再現するために小さなデモ プロジェクトを作成しました: HERE
継承に関連しているようです。で同じことを試してみるとContentRevision
動作しますがMyRevision
、それを継承する では動作しません。