Итак, у меня есть список заявок ИТ / разработчиков, хранящихся в базе данных через Linq-To-Sql. Попытки сохранения выполняются только по запросу пользователя или, если они говорят, сохранить при закрытии. Меня беспокоило то, что пользователь вносит изменения в 2 или более билетов без сохранения промежуточных.
По какой-то причине, если база данных отклоняет изменение на единицу, не дает мне много информации о том, с каким элементом или в каком поле и в каком билете возникла проблема, поэтому я могу связать его с предоставлением пользователю индикатора. Теперь я не могу сохранить хорошие данные в записях, которые они редактировали, потому что одно изменение застряло в очереди, и теперь SubmitChanges больше не работает.
Я построил систему буферизации, в которой каждый билет упакован в другой класс, чтобы изменения сохранялись в буфере, а не непосредственно в объекте linq to sql, где для каждого билета изменялось:
- Я мог бы создать новый экземпляр dataContext
- попытка сохранить изменения для отдельной строки
- затем сообщайте пользователю о каждой неудаче.
Код, который я предполагаю, имеет довольно неприятный запах или, по крайней мере, уродлив.
Мой коллега только что предложил мне попробовать транзакции. Я бы предпочел не разбирать то, что я создал, для проверки транзакционного подхода.
- Будут ли транзакции правильно сбрасывать все изменения элемента или все элементы, которые SaveChanges попытается сохранить? впоследствии я ожидал, что hasChanges будет пустым, а SaveChanges ничего не сделает.
- Есть ли лучший способ отправить отдельные изменения строки одновременно в linq-to-sql?
- Я что-то упускаю в исключениях SaveChanges, которые действительно помогли бы мне узнать, в какой строке и в каком поле этой строки возникла проблема?
Возможно, я не должен позволять (из-за linq-to-sql или из-за того, что в реальном мире не требуется возможность вносить изменения в несколько устройств без принятия решения о сохранении или нет) пользователю оставлять билет до тех пор, пока он не примет решение хотят ли они сохранить изменения или нет?