Идея состоит в том, что вы создаете уникальный номер для формы, и когда форма публикуется, вы сохраняете этот уникальный номер в базе данных в записи, которую вы редактируете / создаете. Перед сохранением проверьте, не был ли этот номер уже использован, в этом случае это была форма, которая была восстановлена путем обновления.
Если вы обновляете запись, вам нужно только проверить, была ли эта запись сохранена с тем же уникальным номером, но если вы добавляете новую запись, вы должны проверить, имеет ли какая-либо другая запись этот номер.
Guid - это хорошее число для использования, поскольку маловероятно, что вы получите дубликат. 31-битное случайное число, которое может генерировать класс Random
, также вряд ли даст дубликаты, но 128-битный Guid делает его намного менее вероятным.
Вам не нужно создавать значение Guid в базе данных, просто используйте Guid.NewGuid()
в коде, который инициализирует форму. Вы можете поместить Guid в скрытое поле в форме. В базе данных вам нужно только поле, которое может хранить значение Guid, либо тип данных Guid, если он доступен, либо просто текстовое поле, достаточно большое, чтобы вместить текстовое представление Guid.
Вы можете использовать метод ToString
, чтобы получить строковое представление значения Guid (чтобы вы могли поместить его в форму). Использование id.ToString("N")
дает наиболее компактный формат, то есть 32 шестнадцатеричных цифры без разделителей. Использование id.ToString("B")
дает более узнаваемый формат "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}". Чтобы вернуть Guid из строки (любого формата), вы просто используете new Guid(str)
.