删除表中的所有实体

时间:2014-03-13 23:02:55

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

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

entities.ExecuteStoreCommand("DELETE FROM TABLENAME");

以上查询不会删除所有行。后来,我也会使用像

这样的地方
entities.ExecuteStoreCommand("DELETE FROM TABLENAME WHERE COL1=0");

2 个答案:

答案 0 :(得分:0)

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

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

OR

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

答案 1 :(得分:0)

您可以使用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.
}