プライマリキーを使用して、Linqでエンティティに削除する方法が組み込まれていますか?エンティティへのLinqの削除
現在メートルの仕事は周りの私はちょうど
このcontext.DeleteTable(ID)ですん
、その後、エンティティにC#のLINQで(表はテーブル名である)DeleteTableと呼ばれるストアドプロシージャを作成することです最良の方法?他にどんな選択肢がありますか?
プライマリキーを使用して、Linqでエンティティに削除する方法が組み込まれていますか?エンティティへのLinqの削除
現在メートルの仕事は周りの私はちょうど
このcontext.DeleteTable(ID)ですん
、その後、エンティティにC#のLINQで(表はテーブル名である)DeleteTableと呼ばれるストアドプロシージャを作成することです最良の方法?他にどんな選択肢がありますか?
データベースにアクセスしてオブジェクトのすべてのフィールドを取得したくない場合は、クラスの新しいインスタンスを作成し、新しいコンテキストにアタッチして削除し、変更を保存できます。これにより、EFは適切な削除コマンドを生成することができます。
using (var context = new MyContext())
{
var myObject = new MyObject { ID = 3 };
context.MyObjectSet.Attach(myObject);
context.MyObjectSet.DeleteObject(myObject);
context.SaveChanges();
}
注:これは、存在しないオブジェクトを削除しようとしている場合を除きます。これは、オブジェクトが存在することがわかっている場合にのみ適切です。
注2:これは
デフォルトの方法は、エンティティに問い合わせて、.DeleteObject(...)メソッドを発行することです。
内部の使用これは、このDBに2回の旅行を必要としませんか? – michael
はい。明示的なストアドプロシージャをマップまたは呼び出したくない場合は、オプションが限られています。 –
@マイケル「アタッチ」には旅行は必要ない? –
は、次のような文脈のを離れてあなたのニーズに実行するコマンドを使用します。あなたはDbSet<T>.Remove(entity)
(バージョン4.1、4.2)を使用することができますHTH
mycontext.ExecuteCommand("DELETE FROM MYTABLE");
または
mycontext.ExecuteCommand("TRUNCATE TABLE MYTABLE");
かEntitySet<T>.Remove(entity)
(バージョン1.0,4.0)メソッド:
YourDbContext.Table.Remove(entityObject);
生成は、コマンドリファレンスにID(ないタイムスタンプのプロパティを意味しない、またはクエリに含まれることになる同様のもの)よりも他のフィールドを削除しないように、あなたのエンティティを設定したと仮定しDeleteObjectメソッドを使用して、削除するアイテムを検索してから削除します。
Dim itemToDelete = (From u In db.SOME_TABLE Where u.ID = ID).FirstOrDefault
db.SOME_TABLE.DeleteObject(itemToDelete)
db.SaveChanges()
のtry catchブロック
これは本当に機能しますか?甘い!それは役に立つでしょう。 +1 – BZink
それは動作しますが、EFで生成された削除コマンドがID以外のフィールドを参照していない場合にのみ機能すると付け加えておきます。タイムスタンプフィールドがある場合、EFは生成されたクエリにそのフィールドを含めますが、使用する値がわからないためクエリが間違っています。 – hvd