За обеми от данни като 300k редове бих забравил EF. Бих направил това, като имам таблица като:
BatchId RowId
Където RowId е PK на реда, който искаме да актуализираме, а BatchId просто препраща към това „изпълнение“ от 300 000 реда (за да позволим няколко наведнъж и т.н.).
Бих генерирал нов BatchId (това може да е нещо уникално - Guid се сещам) и бих използвал SqlBulkCopy, за да вмъкна записи в тази таблица, т.е.
100034 17
100034 22
...
100034 134556
След това бих използвал обикновен sproc, за да направя присъединяването и актуализирането (и да изтрия партидата от таблицата).
SqlBulkCopy е най-бързият начин за получаване на този обем от данни на сървъра; няма да се удавиш в отиване и връщане. EF е обектно-ориентиран:подходящ за много сценарии - но не и за този.