För datavolymer som 300k rader skulle jag glömma EF. Jag skulle göra detta genom att ha en tabell som:
BatchId RowId
Där RowId är PK för raden vi vill uppdatera, och BatchId hänvisar bara till denna "körning" av 300 000 rader (för att tillåta flera samtidigt etc).
Jag skulle generera ett nytt BatchId (detta kan vara vad som helst unikt -Guid hoppar på) och använda SqlBulkCopy för att infoga posterna i den här tabellen, dvs.
100034 17
100034 22
...
100034 134556
Jag skulle sedan använda en simgle sproc för att göra sammanfogningen och uppdateringen (och ta bort batchen från tabellen).
SqlBulkCopy är det snabbaste sättet att få denna volym data till servern; du kommer inte att drunkna i tur och retur. EF är objektorienterat:bra för många scenarier - men inte det här.