我现在正在使用实体框架,有一件事让我很恼火,因为要删除一个项目,我们必须找到该对象,然后将其删除。因此,如果我们有记录的 PK ,我们必须得到该对象,然后删除该对象。
前:
Category category = db.Categories.Find(categoryId);
db.Categories.Remove(category);
db.SaveChages();
在这个方法中,我们两次击中数据库.. !!! 有没有办法只用一次数据库删除记录?
对于那些没有信徒的人来说,这是瞥见::)
答案 0 :(得分:1)
// no trip to database
var rec = db.TableName.Local.SingleOrDefault(r => r.Id == primaryKey);
if (rec == null) throw NotFoundOrWhateverException();
// still no trip to database, if I remember right
db.TableName.Remove(rec);
// trip to database
db.SaveChanges();
答案 1 :(得分:1)
如果您不想获得完整的对象,可以使用它的主键属性尝试这种方式:
Category category = new Category () { Id = categoryId } ;
db.Categories.Attach(category);
db.DeleteObject(category);
db.Savechanges();
如果您使用的是EF 5,那么您可以使用NUGET使用EntityFramework.Extended Library,并且可以这样做:
db.Categories.Delete(c => c.Id == categoryId);
答案 2 :(得分:0)
[答案结果证明不正确。删除内容以避免混淆他人。保留评论帖子的帖子。]