使用实体框架删除项目

时间:2013-03-05 15:14:44

标签: c# linq entity-framework

我正在尝试使用Entity Framework删除对象,并且在互联网上的所有教程中我发现为了做到这一点,你必须在上下文中调用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 个答案:

答案 0 :(得分:26)

您使用的是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 :(得分:5)

删除实体但未通过更改状态检索实体的可能解决方案

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();  
 }