2012-06-15 23 views
0

我試圖刪除一個實體 - 表刪除表 - MVC3

這是代碼:

db.Sessions.SqlQuery("delete table session"); 
db.SaveChanges(); 

這個心不是刪除表。或者做任何事.. db是從DbContext對象繼承而來的。

我已經找到了解決辦法

foreach (var item in db.Sessions) 
{ 
    db.Sessions.Remove(item); 
} 

db.SaveChanges(); 

但我敢肯定,那裏有一個更好的辦法。

謝謝。

+0

這不是有效的SQL。 – SLaks

回答

1

SqlQuery,如果你想刪除的名稱只意味着執行查詢表中你需要別的東西:

通過使用該DbContext.Database財產可以執行任何DDL/DML查詢:

db.DataBase.ExecuteSqlCommand("drop table sessions"); 

我還創建了一個攝製和它的正常工作與EF4.3.1與SQL Server2008的:所以你需要使用會議 EF默認使用plurar表名:

using (var db = new EFRepros()) 
{ 
    db.Sessions.Add(new Session() { Name = "Test1" }); 
    db.Sessions.Add(new Session() { Name = "Test2" }); 
    db.Sessions.Add(new Session() { Name = "Test3" }); 
    db.SaveChanges(); 
    Console.WriteLine(db.Sessions.Count()); // Output: 3 
    db.Database.ExecuteSqlCommand("delete from sessions"); 
    //db.Database.ExecuteSqlCommand("truncate table sessions"); //this also works 
    Console.WriteLine(db.Sessions.Count()); // Output: 0 
} 

注意。

+0

我不想放棄。我想刪除/截斷。當我嘗試它時,它會返回:「解析查詢時出現錯誤[令牌行號= 1,令牌行偏移= 1,令牌出錯=截斷]」 – Nir

+0

您嘗試過'db.DataBase.ExecuteSqlCommand(「 DELETE FROM session「);'? – nemesv

+0

是的。我試圖刪除 – Nir

1

您是否試圖放棄該表?如果是這樣,你不能通過調用SqlQuery來實現,因爲顧名思義,該方法嚴格地處理查詢。

如果你想刪除表中的所有行,那麼這個問題就是一個重複:

Linq to Sql: How to quickly clear a table

+0

我沒有ExecuteCommand功能 – Nir