2013-03-05 98 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(); 
}