Как бы вы применили плавные API к DTO, чтобы это не привело к созданию таблицы с EF6? - PullRequest
0 голосов
/ 10 июля 2020

Могу ли я применить 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 не имеет никаких проверок. Итак, мои вопросы:

  1. как я могу применить ModelState.IsValid к authorToInsert после сопоставления с Dto?
  2. Во-вторых, если это невозможно , и, оказывается, я должен продублировать проверки в DTO, аналогично проверкам, которые у меня есть на моделях предметной области, другая проблема. Я предпочел плавную проверку API на моделях предметной области. Если я создаю класс конфигурации аналогичным образом для DTO, я должен унаследовать от: EntityTypeConfiguration, и результатом этого будет создание новой таблицы в базе данных. Итак, означает ли это, что в DTO у меня не может быть плавных проверок API, только аннотации данных?

PS. Я заставил его работать с аннотацией требуемых данных в DTO, но я считаю, что это не рекомендуется, если модель предметной области имеет плавную проверку API. Это не соответствует общему дизайну. Спасибо.

...