删除ef 4 - mvc3中的表格

时间:2012-06-15 17:51:09

标签: 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();

但我确信这是一个更好的方法。

感谢。

2 个答案:

答案 0 :(得分:2)

SqlQuery正如名称所暗示的那样,只有在你想要删除表时才需要执行查询:

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

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

我还创建了一个repro,它与EF4.3.1和SQL Server2008一起正常工作:

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)

你正试图放弃桌子吗?如果是这样,您不能通过SqlQuery调用来执行此操作,因为顾名思义,该方法严格处理查询。

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

Linq to Sql: How to quickly clear a table