2016-12-12 2 views
2

Я не смог проверить модели, сгенерированные командой Scaffold-DbContext, в моих основных контроллерах ASP.NET.ASP.NET и EF Core - ModelState.IsValid всегда возвращает true для моделей, созданных Scaffold-DbContext

Конфигурации требуемой/максимальной длины все находятся в методе onModelCreating класса контекста, сгенерированного ядром EF.

protected override void OnModelCreating(ModelBuilder modelBuilder) { 
    modelBuilder.Entity<ModelClass>(entity => { 
     entity.ToTable("ModelClass", "schema"); 

     entity.Property(e => e.ModelClassCode) 
       .IsRequired() 
       .HasMaxLength(30); 

Мой контроллер получает данные для моделей как JSON, но ModelState.IsValid всегда возвращает истину, даже если я отправить недопустимые данные.

public IActionResult CreateModelClass([FromBody]ModelClass modelClass) { 
    // ModelState.IsValid always returns true here 

Единственный способ я получил ModelState.IsValid ложным является добавление аннотаций данных в классе модели. Я хотел бы избежать этого, потому что выполнение команды scaffold будет перезаписывать эти изменения.

Я что-то упустил? Есть ли пример, на который меня могут навестить? Те, что я видел, связанные с проверкой, все используют аннотации данных.

+0

Я считаю, что основа проверки основывается на аннотациях данных о свойствах. Поэтому вам нужно, чтобы модальная валидация работала. – Shyju

+0

Спасибо за ответ @Shyju. Я надеюсь избежать аннотаций данных в модели, потому что они будут перезаписаны, когда я регенерирую модели из базы данных. – user7003875

+0

Вы можете использовать 'Scaffold-DbContext' для генерации аннотаций данных вместо свободного Api, где это возможно. Используйте следующую командную строку arg '-a | --data-annotations Используйте атрибуты DataAnnotation для настройки модели, где это возможно. Если этот параметр опущен, выходной код будет использовать только свободный API. ' Таким образом' Обязательный'/'' MaxLength' и т. Д. Будут подкрашены с помощью аннотаций и предоставят вам поддержку проверки. – Smit

ответ