私はまだEF4の複雑さを学んでいる開発者です。私はオブジェクトのリストをプルダウンしてループでそれらを削除する方法をよく知っていますが、n個のレコードに対してn個のステートメント(およびデータベースのラウンドトリップ)を実行するコードを記述することはできません更新または削除。EF4を使用して効率的な複数行のDELETEまたはUPDATEを実行できますか?
このための古典的なケースでは、参照整合性を...私は「ストアドプロシージャでは
(はい、私はデフォルトはなく、ユーモア私がソフト削除を採用)を維持するために、関連する親レコードを削除する前に子レコードを削除しています私はこれを行うだろうLINQ to SQLので
DELETE FROM someChildTable WHERE ForeignTableId = @keyToGo
DELETE FROM parentTable WHERE Id = @keyToGo
:ちょうどそうのように、SQLを実行dはNHibernateので
dataContext.ChildrenTable.DeleteAllOnSubmit(from c in dataContext.ChildrenTable
where c.ParentTableId == keyToGo
select c);
dataContext.ParentTable.DeleteOnSubmit(parentToGo);
dataContext.SubmitChanges();
を私はこれを行うだろう。
nhSession.CreateQuery("delete from ChildrenTable where ParentTable.Id = :keyToGo")
.SetInt32("keyToGo", keyToGo)
.ExecuteUpdate();
nhSession.Delete(parentToGo);
私は、これらのいずれかのEF同等物が成功せずに探しました。 EF4のコンテキスト内でこれを行うには、実際にはストアドプロシージャに戻る必要がありますか? 私は願っていません。シェアしてください。
私はEFを知らないので質問には答えられませんが、NHibernateの場合、Cascade AllまたはCascade Deleteをオンにするだけで、子のためのクエリを作成する必要はありません関係。 – Phill