How to Delete All Objects From an Entity in the Entity Framework 4

In a previous blog entry, I described how happy I was with Code-First Development with Entity Framework 4.  It was a good first impression, and then I had to go beyond my initial spike and create a set of integration tests that would actually work over and over.  So I wanted to delete all of the rows from one of my tables, but I couldn’t figure out how.  Linq doesn’t appear to be that great at mass deletions, and EF doesn’t appear to have any intrinsic functionality for this.  All I wanted to do was:

DELETE FROM foo;

I could have dropped and recreated the database on the fly, and I may end up doing that in the future sometime, but at the moment that seems a little extreme.  It looks like the following gets the job done, but you have to “drop down” to the SQL level to accomplish it:


         public void DeleteAll()
        {
            var snap = new SnapIDs();
            var cmd = snap.Database.Connection.CreateCommand();
            cmd.CommandText = "DELETE FROM ServerConfigurationModels";
            snap.Database.Connection.Open();
 
            cmd.ExecuteNonQuery();
 
            snap.Database.Connection.Close();
        }

Not the ideal solution – I’d rather do something like clear my DbSet and SaveChanges() – but it’s pretty SQL agnostic at least.