Могу ли я применить ModelState к объекту, отображаемому из DTO, переданного контроллеру, и если нет, как бы вы применили плавные API к DTO без создания таблицы?
Чтобы добавить больше контекста к этому вопросу. .. Я добавил несколько плавных проверок API к своим объектам, например, у Author есть связанный класс AuthorConfiguration:
public class AuthorConfiguration : EntityTypeConfiguration<Author>
{
public AuthorConfiguration()
{
HasKey(b => b.Id);
Property(c => c.Name)
.IsRequired()
.HasMaxLength(2000);
}
}
, который в классе AppContext установлен:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new AuthorConfiguration());
}
В контроллер, но у меня есть это:
// POST: api/authors
public IHttpActionResult Post([FromBody] AuthorCreateDto author)
{
var authorToInsert = Mapper.Map<Author>(author);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_unitOfWork.Authors.Add(authorToInsert);
_unitOfWork.Complete();
return StatusCode(HttpStatusCode.Created);
}
И проблема в том, что я могу вставить автора, у которого нет имени! Я думаю, это потому, что в контроллере ModelState.IsValid всегда будет возвращать true, поскольку AuthorCreateDto не имеет никаких проверок. Итак, мои вопросы:
- как я могу применить ModelState.IsValid к authorToInsert после сопоставления с Dto?
- Во-вторых, если это невозможно , и, оказывается, я должен продублировать проверки в DTO, аналогично проверкам, которые у меня есть на моделях предметной области, другая проблема. Я предпочел плавную проверку API на моделях предметной области. Если я создаю класс конфигурации аналогичным образом для DTO, я должен унаследовать от: EntityTypeConfiguration, и результатом этого будет создание новой таблицы в базе данных. Итак, означает ли это, что в DTO у меня не может быть плавных проверок API, только аннотации данных?
PS. Я заставил его работать с аннотацией требуемых данных в DTO, но я считаю, что это не рекомендуется, если модель предметной области имеет плавную проверку API. Это не соответствует общему дизайну. Спасибо.