使用实体框架删除项目

ale*_*dru 17 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);
    }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

'DataAccess.Models.BooksEntities'不包含'DeleteObject'的定义,也没有扩展方法'DeleteObject'接受类型'DataAccess.Models.BooksEntities'的第一个参数(你是否缺少using指令或程序集引用) ?)

我究竟做错了什么?

Mar*_*eta 29

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

public void DeleteBook(int bookId)
    {
        Book book = (Book)bookContext.Books.Where(b => b.Id == bookId).First();
        bookContext.Books.Remove(book);
    }
Run Code Online (Sandbox Code Playgroud)

  • 您需要添加保存更改. (4认同)

小智 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();  
 }  
Run Code Online (Sandbox Code Playgroud)