Я получаю ежедневный XML-файл, который я использую для обновления базы данных содержимым. Файл всегда является полным файлом, т.е. все включено, независимо от того, изменено оно или нет. Я использую Linq2Sql для обновления базы данных, и я спорил, стоит ли проверять, изменилось ли что-либо в каждой записи (большинство не изменится), и обновлять только те, которые изменились, или просто обновлять каждую запись текущими данными.
Мне кажется, что мне нужно запустить базу данных с обновлением для каждой записи, чтобы я мог отсеять записи, которые не включены в XML-файл. Я устанавливаю обработанную дату для каждой записи, а затем повторно проверяю не обработанные, чтобы удалить их. Тогда я подумал, должен ли я просто найти соответствующую запись в базе данных и обновить объект текущей информацией, изменился он или нет. Это привело меня к более внимательному взгляду на SQL, созданный для обновлений. Я обнаружил, что только те данные, которые изменились, задаются в операторе обновления базы данных, но я обнаружил, что предложение WHERE включает в себя все столбцы в записи, а не только первичный ключ . Это кажется очень расточительным с точки зрения данных, летящих по системе, и поэтому меня удивляет, почему это так и есть ли настройка для контекста LinqToSql, чтобы использовать только первичный ключ в предложении.
Итак, у меня два вопроса:
- Почему в предложении LinqToSql where включены все текущие данные, а не только первичный ключ?
- Есть ли способ настроить контекст на использование только первичного ключа в предложении where?