ef学習雑記4:取得せずにオブジェクトを直接削除する方法

3959 ワード

に質問
最も一般的な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();


まずクエリーを行う必要がなく、データからオブジェクトを削除しました.