我尝试删除实体 - 表
这是代码:
db.Sessions.SqlQuery("delete table session");
db.SaveChanges();
这不会删除表格。或做任何事情.. db继承自DbContext对象。
我找到了解决方案
foreach (var item in db.Sessions)
{
db.Sessions.Remove(item);
}
db.SaveChanges();
但我确信这是一个更好的方法。
感谢。
答案 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
调用来执行此操作,因为顾名思义,该方法严格处理查询。
如果您尝试删除表中的所有行,则此问题与此重复: