Самый чистый способ заполнения отключенного поля ввода через DB

#asp.net-mvc #linq #orm

#asp.net-mvc #linq #orm

Вопрос:

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

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

В идеале, вот псевдокод:

<input type="text" name="email" value="<% (SELECT Max(ItemID) FROM dbo.Inventory).ToInt32 1 %>" disabled="disabled"/>

У меня уже настроена Linq для SQL ORM. Все это делается в MVC, поэтому мне пришла в голову идея определить правильное значение внутри контроллера формы, а затем просто передать его непосредственно в представление.

Какой был бы самый чистый и простой способ добиться этого? Я думаю, в идеале поле «значение» должно занимать не более 1 строки.

Ответ №1:

Этот подход не сработает.

Если ItemID поле автоматически увеличивается, какие компоненты увеличивают его значение? Где угодно, кроме базы данных, вы столкнетесь с проблемами. Предполагая, что вы используете поле, назначенное базой данных, когда вы заполняете свое поле ввода значением, вы принимаете следующее доступное значение на тот момент. Что произойдет, если две формы будут прочитаны и отправлены не по порядку? Идентификатор, который вы вводите в поле значения, не будет совпадать с идентификатором, который назначит база данных. Таким образом, это потенциально могло бы работать только для одного пользователя одновременно.

Лучше всего позволить базе данных присваивать значение, когда вы выполняете фактическую вставку в базу данных с использованием столбца identity, и не беспокоиться о том, чтобы делать это вручную или даже пытаться предсказать id — не заполняйте поле value таким образом.