Обработка GUID в ASP.Net MVC 3 - PullRequest
0 голосов
/ 28 июня 2011

В моей базе данных есть несколько таблиц, в которых есть столбец типа GUID. Я не хочу, чтобы это было частью скаффолдинга при создании моих представлений, поэтому я использую [ScaffoldColumn (false)]. Я не хочу, чтобы пользователь вводил фактический GUID при «создании» нового объекта. Есть ли способ автоматизировать процесс автоматического добавления нового GUID (через аннотации данных или каким-либо другим способом?), Когда пользователь создает новый объект, или мне нужно изменить контроллер для каждой таблицы, которая имеет GUID, чтобы каждый Когда пользователь создает новую запись, я должен убедиться, что сгенерировал новый GUID, прежде чем сохранить его?

Спасибо.

1 Ответ

4 голосов
/ 28 июня 2011

Здесь (ИМХО) новые функции скаффолдинга поощряют неверный код.

Вы должны определить отдельные ViewModel для ваших представлений.Они содержат только те поля, которые вы хотите, чтобы пользователь изменил, вместе с какими-либо проверками / правилами для конкретного представления.

В рамках действия вашего контроллера вы можете проверить, является ли введенный пользователем ввод действительным (ModelState.IsValid), и если да, выполнитенекоторое левостороннее сопоставление между вашими свойствами ViewModel и свойствами вашей сущности.

Подробнее см. Рекомендации по ViewModel .

Однако, чтобы ответить на ваш вопрос, вы можетеиспользуйте атрибут HiddenInput в поле Id, чтобы он отображался как <input type="hidden"...

Что касается установки идентификатора, создайте базовый класс для ваших сущностей, например:

public abstract class BaseEntity {
    public Guid Id {get;set;}
    public BaseEntity() {
        Id = Guid.NewGuid();
    }
}

Затем вы можете наследовать свои сущности от этого класса, а когда вы вызываете new MyEntity() базовый классбудет вызван конструктор, таким образом, установив Id.

...