2013-03-05 57 views
13

我想删除一个对象使用实体框架和互联网上的所有教程我发现,为了做到这一点,你必须调用上下文的DeleteObject方法。我试过这样做,但似乎我没有DeleteObject方法。删除一个项目与实体框架

这里是我的代码:

public void DeleteBook(int bookId) 
    { 
     Book book = (Book)bookContext.Books.Where(b => b.Id == bookId).First(); 
     bookContext.DeleteObject(book); 
    } 

这是错误我得到:

'DataAccess.Models.BooksEntities' 不包含 'DeleteObject的',没有扩展方法的定义可以找到'DeleteObject'接受类型'DataAccess.Models.BooksEntities'的第一个参数(缺少使用指令或程序集引用吗?)

我在做什么错?

+2

如果你把'(图书)'摘掉'Book'分配,改变'Book'变量'var',当鼠标悬停显示什么类型的?我认为你在使用错误的课程。 – mattytommo 2013-03-05 15:18:23

回答

22

您使用的是DbContext还是ObjectContext?如果你有一个的DbContext你需要使用Remove功能:

public void DeleteBook(int bookId) 
    { 
     Book book = (Book)bookContext.Books.Where(b => b.Id == bookId).First(); 
     bookContext.Books.Remove(book); 
    } 
+1

您需要添加保存更改。 – Netferret 2016-12-02 10:36:09

3

删除实体而不检索它通过改变国家的可能的解决方案

的DbContext有方法称为入口和条目,这些方法得到给定实体的DbEntityEntry并提供对实体信息的访问,并返回能够对实体执行操作的DbEntityEntry对象。现在我们可以通过将实体状态更改为EntityState.Deleted来对上下文执行删除操作。

using (Entities Context = new Entities()) 
{ 
    Book deptBook = new Book { Id = bookId }; 
    Context.Entry(deptBook).State = EntityState.Deleted; 
    Context.SaveChanges(); 
}