19

我正在尝试使用实体框架删除一个对象,在互联网上的所有教程中,我发现为了做到这一点,您必须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”的定义,并且找不到接受“DataAccess.Models.BooksEntities”类型的第一个参数的扩展方法“DeleteObject”(您是否缺少 using 指令或程序集引用?)

我究竟做错了什么?

4

2 回答 2

32

您使用的是 DbContext 还是 ObjectContext?如果您有 DbContext,则需要使用Remove函数:

public void DeleteBook(int bookId)
    {
        Book book = (Book)bookContext.Books.Where(b => b.Id == bookId).First();
        bookContext.Books.Remove(book);
    }
于 2013-03-05T15:17:57.783 回答
7

通过更改状态删除实体而不检索它的可能解决方案

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

 using (Entities Context = new Entities())  
 {  
    Book  deptBook  = new Book  { Id  = bookId };  
    Context.Entry(deptBook).State = EntityState.Deleted;  
    Context.SaveChanges();  
 }  
于 2014-12-08T15:04:08.843 回答