1

我试图删除一个实体 - 表

这是代码:

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

这不是删除表。或者做任何事情.. db 继承自 DbContext 对象。

我找到了解决方案

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

db.SaveChanges();

但我确信有更好的方法。

谢谢。

4

2 回答 2

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 使用复数表名,因此您需要使用sessions

于 2012-06-15T18:08:16.583 回答
1

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

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

Linq to Sql:如何快速清空表

于 2012-06-15T17:59:23.360 回答