【问题标题】:Delete all entities in a table删除表中的所有实体
【发布时间】:2014-03-13 23:02:54
【问题描述】:

我想删除所有表(使用 Entity Framework 4+ 的所有实体)的内容(仅数据,但不包括结构和外键)。如何才能做到这一点? 我在 Visual Studio 2010 中使用 SQLCE 和实体框架。

entities.ExecuteStoreCommand("DELETE FROM TABLENAME");

以上查询不会删除所有行。稍后,我也会使用 where 子句,如

entities.ExecuteStoreCommand("DELETE FROM TABLENAME WHERE COL1=0");

【问题讨论】:

  • “不是...外键”是指关系,对吧?
  • 我相信他就是这个意思
  • @Juventus18 是的,我不想删除关系。
  • Context.Database.SqlQuery("DELETE FROM TABLENAME") ,会有帮助吗

标签: c# sql-server entity-framework sql-server-ce


【解决方案1】:

您可以使用 EntityFramework.Extended 库来执行批量删除。这是它的外观示例:

//delete all users where FirstName matches
context.Users.Delete(u => u.FirstName == "firstname");

既然你想删除所有东西,你可以这样使用它:

//delete all users
context.Users.Delete(u => u.UserId >= 0);

您可以从 nuget 或他们的 Github 下载包:https://github.com/loresoft/EntityFramework.Extended

我想到您可能在删除时遇到问题,因为您需要在删除时启用级联。如果你使用的是 EF 的代码优先方式,你可以这样做:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<User>()
        .HasOptional(a => a.UserDetail)
        .WithOptionalDependent()
        .WillCascadeOnDelete(true); // <-- add this to the code-first model builder.
}

【讨论】:

  • 你能给我一个从 Nuget 下载的链接吗?
  • 比这要复杂一些。 Nuget 是 .NET 的包管理解决方案。您并没有真正下载文件,至少不是直接下载。相反,您将包安装到您的项目中。以下是如何使用 PackageManager 控制台的简要概述:docs.nuget.org/docs/start-here/…
  • 它可以与 SQL compact 一起使用吗?请原谅我的无知。我是 sqlce 的新手。
  • 据我所知,是的
【解决方案2】:

在 SQL 中,您可以使用 TRUNCATE TABLENAME,但如果您有外键,则必须将键计数设置为 0,然后截断,然后再次将键计数设置为 1:

"SET FOREIGN_KEY_CHECKS = 0;"
"TRUNCATE TABLE TALBENAME;"
"SET FOREIGN_KEY_CHECKS = 1;"

"ALTER TABLE TABLENAME;"
"DROP CONSTRAINT FK_Name;"

【讨论】:

  • 请详细说明如何将密钥计数设置为 0。
  • 发生了SqlCeException。设置选项= KEYCOUNT
  • 抱歉语法不正确。再次编辑,现在应该可以了。
  • 无效的 SET OPTION foreign_key_checks
  • 我相信还有一些方法可以管理您的工具箱/工作台中的外键,无论它可能被称为什么
猜你喜欢
  • 2011-08-30
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 2011-10-14
相关资源
最近更新 更多