ef学習雑記4:取得せずにオブジェクトを直接削除する方法
3959 ワード
に質問
最も一般的なEntity Frameworkのエンティティを削除する方法は、削除するエンティティをContextに転送し、次のように削除することです.
しかし、このコードは、1つではなく2つのデータベースコマンドをトリガーします.私が実際に完成しなければならないのは
ほとんどの場合、これは悪くありませんが、パフォーマンスと拡張性が重要であれば、この方法は望ましくありません.
ソリューション
幸いなことに、Entity Frameworkは、変更されていない状態でエンティティをObjectContextに入れることができるAttachTo(...)という方法を提供しています.
この方法では、次のようにクエリーを「偽造」することができます.
まずクエリーを行う必要がなく、データからオブジェクトを削除しました.
最も一般的なEntity Frameworkのエンティティを削除する方法は、削除するエンティティをContextに転送し、次のように削除することです.
// ID
// : .NET4.0 .Single() ¨
// 1
var category = (from c in ctx.Categories
where c.ID == 3
select c).First();
//
ctx.DeleteObject(category);
//
ctx.SaveChanges();
しかし、このコードは、1つではなく2つのデータベースコマンドをトリガーします.私が実際に完成しなければならないのは
DELETE FROM [Categories] WHERE ID = 3
ほとんどの場合、これは悪くありませんが、パフォーマンスと拡張性が重要であれば、この方法は望ましくありません.
ソリューション
幸いなことに、Entity Frameworkは、変更されていない状態でエンティティをObjectContextに入れることができるAttachTo(...)という方法を提供しています.
この方法では、次のようにクエリーを「偽造」することができます.
//
// ,
// ID
Category stub = new Category { ID = 4 };
// category stub attach "Categories"
// context
//
ctx.AttachTo("Categories", stub);
// category
ctx.DeleteObject(stub);
// ? ? y á ? ? y Y a
ctx.SaveChanges();
まずクエリーを行う必要がなく、データからオブジェクトを削除しました.