Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deleting an item with entity framework

I am trying to delete an object using Entity Framework and on all the tutorials on the internet I found that in order to do that you have to call the DeleteObject method on the context. I tried doing that but it seems I have no DeleteObject methods.

Here is my code:

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

This is the error I get:

'DataAccess.Models.BooksEntities' does not contain a definition for 'DeleteObject' and no extension method 'DeleteObject' accepting a first argument of type 'DataAccess.Models.BooksEntities' could be found (are you missing a using directive or an assembly reference?)

What am I doing wrong?

like image 456
aleczandru Avatar asked Mar 05 '13 15:03

aleczandru


2 Answers

Are you using a DbContext or an ObjectContext? If you have a DbContext you need to use the Remove function:

public void DeleteBook(int bookId)
    {
        Book book = (Book)bookContext.Books.Where(b => b.Id == bookId).First();
        bookContext.Books.Remove(book);
    }
like image 139
Mark Oreta Avatar answered Oct 14 '22 22:10

Mark Oreta


The probable solutions of deleting the entity without retrieving it By Changing State

DbContext has methods called Entry and Entry, these methods get a DbEntityEntry for the given entity and provide access to the information about the entity and return a DbEntityEntry object able to perform the action on the entity. Now we can perform the delete operation on the context by just changing the entity state to EntityState.Deleted.

 using (Entities Context = new Entities())  
 {  
    Book  deptBook  = new Book  { Id  = bookId };  
    Context.Entry(deptBook).State = EntityState.Deleted;  
    Context.SaveChanges();  
 }  
like image 34
premkumar Avatar answered Oct 14 '22 23:10

premkumar