If you don’t want to execute SQL directly calling DeleteObject in a loop is the best you can do.
context.Widgets.Where(w => w.WidgetId == widgetId)
               .ToList().ForEach(context.Widgets.DeleteObject);
context.SaveChanges();EntityFramework 6 has made this a bit easier with .RemoveRange().
db.People.RemoveRange(db.People.Where(x => x.State == "CA"));
db.SaveChanges(); 
