12

I read that the new Entity Framework will include a method to delete multiple items (Linq to SQL has DeleteAllOnSubmit()) but I can't find the function/method to do that.

Is this in Beta 2 or do I have to make my own?

UPDATE:

This is what I'm using now:

    public void DeleteObjects(IEnumerable<object> objects)
    {
        foreach (object o in objects)
        {
            DeleteObject(o);
        }
        SaveChanges();
    }
Daniel Fortunov
  • 43,309
  • 26
  • 81
  • 106
Omar
  • 39,496
  • 45
  • 145
  • 213
  • 1
    possible duplicate of [Bulk-deleting in LINQ to Entities](http://stackoverflow.com/questions/869209/bulk-deleting-in-linq-to-entities) – Danny Varod Jan 15 '12 at 23:30

2 Answers2

8

EF 4 allows you to execute TSQL statements against an object context:

   using (var context = new EntityFrameworkExampleEntities())
    {       
     var count = 
         context.ExecuteStoreCommand(@"DELETE FROM Companies WHERE [CompanyID]=4");            
    }

See the following blog for details.

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework-4.aspx

Shiraz Bhaiji
  • 64,065
  • 34
  • 143
  • 252
  • Is there a drawback to my function? – Omar Nov 29 '09 at 22:57
  • 2
    The drawback would be that all of your objects are held in memory during the removal. If you wanted to delete a large batch of objects that you haven't already loaded from the database, they would all be loaded into the application before they were deleted. – Anders Fjeldstad Oct 22 '10 at 11:26
  • 1
    Ick. To quote the article you link to, "This ability should only be used in cases that Entity Framework doesn’t support something that you need." EF does support deleting multiple objects, call DeleteObject() and then SaveChanges() (or do this http://stackoverflow.com/a/870081/24267). – mhenry1384 Oct 08 '12 at 21:03
0

I know this is late, but I found this post and found a simpler solution, that wasn't posted. You can set OnDelete to Cascade in the Association properties. In VS2012 open the edmx file. Click on the association and you'll find the OnDelete in the Properties tab. Then you can use the Remove() method with no triggers or any other special handling.

beezler
  • 646
  • 6
  • 18