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