问题

最常见的删除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();

    然而这段代码会触发两条数据库命令而不是一条。我的意思是我实际需要完成的就是:

DELETE FROM [Categories] WHERE ID = 3

大多数情况下这还不太坏,但是如果性能与可扩展性对你很关键,则这种方式绝不理想。

解决方案

幸运的是Entity Framework提供了名为AttachTo(…)的方法,它使你可以在未改变的状态下将实体放入ObjectContext中。

你可以使用这个方法像下面这样"伪造"一个查询:

// 创建一个实体来表示你想要删除的实体
// 注意你不需要知道所有的属性,
// 在这个例子中仅有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();

现在你已经在无需首先进行查询的情况下由数据中删除一个对象。

相关文章:

  • 2021-11-15
  • 2021-04-10
  • 2022-12-23
  • 2022-12-23
  • 2021-07-19
  • 2021-12-30
  • 2022-01-30
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-31
  • 2021-12-14
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案