Asp.net mvc 3 删除ef 4-mvc3中的表格

Asp.net mvc 3 删除ef 4-mvc3中的表格,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,我试图删除一个实体表 代码如下: db.Sessions.SqlQuery("delete table session"); db.SaveChanges(); 这不是删除表。或者做任何事。。 db是从DbContext对象继承的 我找到了解决办法 foreach (var item in db.Sessions) { db.Sessions.Remove(item); } db.SaveChanges(); 但我相信有更好的办法 谢谢。你想把桌子放下吗?如果是这样,您就不能通过S

我试图删除一个实体表

代码如下:

db.Sessions.SqlQuery("delete table session");
db.SaveChanges();
这不是删除表。或者做任何事。。 db是从DbContext对象继承的

我找到了解决办法

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

db.SaveChanges();
但我相信有更好的办法


谢谢。

你想把桌子放下吗?如果是这样,您就不能通过
SqlQuery
调用来实现,因为顾名思义,该方法严格处理查询

如果您试图删除表中的所有行,则此问题与以下问题重复:


SqlQuery
顾名思义,如果要删除需要其他内容的表,则仅用于执行查询:

使用该属性,您可以执行任何DDL/DML查询:

db.DataBase.ExecuteSqlCommand("drop table sessions");
我还创建了一个repo,它在使用SQL Server 2008的EF4.3.1时运行良好:

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
}

注意:EF默认使用plurar表名,因此您需要使用会话

我不想删除。我想删除/截断。当我尝试它时,它返回:“解析查询时出错。[令牌行编号=1,令牌行偏移量=1,令牌错误=truncate]”您是否尝试过
db.DataBase.ExecuteSqlCommand(“从会话中删除”)?@nir我已经更新了我的答案,对我来说删除和截断都很好。