3

私はEntityFramework.Extendedを見ています。db エンティティに対して Update() および Delete() を実行できます。お気に入り:

//delete all users where FirstName matches
context.Users.Delete(u => u.FirstName == "firstname");

しかし面白いことに、 を呼び出す必要はなくcontext.SaveChanges()、DB に直接アクセスしてレコードを削除するだけです。

悪いデザインですか?SaveChanges()エンティティのすべての変更を有効にして、データベースとメモリ オブジェクト間の正しい関係とマッピングを維持するために呼び出す必要があると思います。

4

2 に答える 2

5

SaveChanges の機能を理解する必要があります。SaveChanges は、現在のローカル キャッシュに格納されているオブジェクト モデルの変更をコミットします。

参照しているライブラリは SQL コマンド ステートメントを生成し、オブジェクト コンテキストを変更しません。そのため、オブジェクト コンテキストは変更されないため、保存する変更はありません (つまり、SaveChanges はデータベースではなくデータ モデルを参照します)。

これを説明するために... あなたの子供たちがバスで学校に行くときと、あなたが子供たちを降ろすときの違いを想像してみてください。

彼らがバスに乗って学校に行くと、スクールバスはさまざまな停留所を走り回り、バスが終わると、すべての子供たちを一度に降ろします。これは、SaveChanges を呼び出すようなものです。

しかし、あなたが子供を学校に送るとき、それはあなたがそれをするとき、単一の行動で成し遂げられる単一のタスクです.

于 2012-12-10T05:30:32.620 に答える
1

これについては、Readme で説明されています。https://github.com/loresoft/EntityFramework.Extended . 削除したいものがわかっていて、複数のエンティティを削除する必要がある場合は、データベースに移動してこれらを削除するだけで、コンテキストに移動してこれらを削除するよりも高速です。これは ExecuteSqlCommand で SQL コマンドを実行するようなものですが、ここには SQL が表示されません。一方、コンテキストが削除/更新しているエンティティを追跡している場合、いくつかの例外が発生する可能性が高いため、何をしているのか、なぜそれを行っているのか、いつこれを行っているのかを知る必要があります。

于 2012-12-10T01:11:45.107 に答える