Постоянство объектов в .NET и SQL Server с неполными значениями - PullRequest
0 голосов
/ 03 сентября 2010

Я строю форму в Net Framework 4.0, используя linq to sql, и у меня возник вопрос о сохранении объекта.

У меня есть случай, когда пользователя просят заполнить очень длинную форму длиной в несколько страниц. Поскольку это так долго, необходимо сохранять данные в середине потока.

Постоянство на уровне сеанса не является опцией, поскольку они могут СОХРАНИТЬ форму в середине потока, отключить свой браузер и получить форму, частично заполненную позже.

Поля формы отображаются в таблицу БД, причем каждая форма является строкой БД, однако несколько полей являются обязательными и устанавливаются в БД как НЕ обнуляемые. Я хочу предоставить возможность сохранять значения данных не полностью.

Как лучше всего сохранить объект в среднем потоке в его неполном состоянии, а затем, когда пользователь ОТПРАВЛЯЕТ форму, отправляя проверенный и полный объект.

NHibernate также не вариант.

Любые хорошие идеи приветствуются.

Ответы [ 3 ]

1 голос
/ 03 сентября 2010

Мне кажется, вам нужно ответить на несколько вопросов.

  1. Как долго живут эти данные.
  2. Как пользователи "возобновляют"
  3. Где вы хотите его хранить
  4. В каком формате вы хотите получить частичные данные.
  5. Как вы планируете решать проблемы с версиями.

Я бы определенно рассмотрел возможность сериализации данных в конце сеанса и сохранения их в базе данных. Когда пользователи возвращаются, вы можете найти их и спросить, хотят ли они возобновить или нет. Это заботится обо всем вышеперечисленном, кроме # 5. Однако всякий раз, когда вы изменяете объектную модель, это создает потенциальные проблемы совместимости с вашими сериализованными данными.

Другой вариант, с которым я мог бы пойти, - это предварительно запросить все необходимые данные, а затем вы можете сохранить их, когда захотите.

Другой вариант - просто ослабить правила НЕ обнуляемые, а затем снова вы можете сохранить, когда захотите.

0 голосов
/ 03 сентября 2010
  • Вы можете поместить его в файл cookie (или в данные билета, подтверждающие подлинность формы), если хотите, чтобы они отвечали
  • Вы можете использовать кэш asp.net, если вы не против загрузки сервера.
0 голосов
/ 03 сентября 2010

Поскольку вы хотите, чтобы люди могли продолжать заполнять форму, на которой они остановились, даже если они покидают сайт или перезапускают свой браузер, сохранение частично заполненной формы в объектах ViewState или Session недоступно.

Я думаю, что две идеи, которые проще всего реализовать, заключаются в сохранении всех частично заполненных значений в файлах cookie браузера. Или даже лучше (если у вас есть какой-либо контроль над базой данных) создать новую таблицу в БД с почти идентичными полями для таблицы формы. Сохраните значения, введенные в частично заполненную форму в этой таблице (назовите ее Form_Incomplete или что-то в этом роде), затем вставляйте ее в таблицу форм только после того, как пользователь выполнит окончательное сохранение после завершения последней страницы.

...