Đối với khối lượng dữ liệu như 300k hàng, tôi sẽ quên EF. Tôi sẽ làm điều này bằng cách có một bảng như:
BatchId RowId
Trong đó RowId là PK của hàng mà chúng tôi muốn cập nhật và BatchId chỉ đề cập đến "chạy" 300 nghìn hàng này (để cho phép nhiều hàng cùng một lúc, v.v.).
Tôi sẽ tạo một BatchId mới (đây có thể là bất kỳ thứ gì độc đáo -Guid nhảy vọt trong tâm trí) và sử dụng SqlBulkCopy để chèn các bản ghi vào bảng này, tức là
100034 17
100034 22
...
100034 134556
Sau đó, tôi sẽ sử dụng một mầm simgle để tham gia và cập nhật (và xóa lô khỏi bảng).
SqlBulkCopy là cách nhanh nhất để đưa khối lượng dữ liệu này đến máy chủ; bạn sẽ không bị chết đuối trong các chuyến đi khứ hồi. EF là hướng đối tượng:phù hợp với nhiều tình huống - nhưng không phải tình huống này.