Создание объекта dto по идентификатору, где объект получен как полезная нагрузка C # - PullRequest
0 голосов
/ 06 июля 2019

Есть функция контроллера задач, которая получила полезную нагрузку в DTO JSON.Теперь, вставлять или обновлять, зависит от идентификатора, полученного в данных полезной нагрузки.Как создать экземпляр объекта со значением id.

Контроллер задачи:

async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)

Мне нужно обновить / вставить на основе значения идентификатора объекта req.

Должен ли яиспользовать конструктор для RequestDto или путем проверки на ноль присваивать значения идентификаторов

EDIT

Структура DTO здесь:

namespace MyWorkspace.ProjectA.Domain
{
    /// <summary>
    /// Request DTO
    /// </summary>
    public class RequestDto
    {
        /// <summary>
        /// Request Id
        /// </summary>
        [RegularExpression(Constants.GuidRegex)]
        public string RequestId { get; set; }
        [JsonConverter(typeof(StringEnumConverter))]
        public RequestDetails RequestDetails { get; set; }
        public DateTime OpenDate { get; set; }
        **public RequestDto()
        {
            RequestId = Guid.NewGuid().ToString("N");
        }**
    }
}

Теперь мне нужно обновить/ вставьте запрос на основе идентификатора, где 2 типа полезной нагрузки запроса могут быть представлены следующими способами:

1. {
  "reqId": "",
  "requestDetails": {
    "basicDetails": {
      "firstName": "Something",
      "lastName": "Something",
      "emailAddress": "Something",
    },
        "addressDetails": {
      "addLine1": "Something",
      "addLine2": "Something",
      "city": "Something",
      "state": "Something",
      "country": "Something",
    }
  },
  "openDate": "2019-07-05T09:59:18.601Z",
}
2. {
  "reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad",
  "requestDetails": {
    "basicDetails": {
      "firstName": "Something",
      "lastName": "Something",
      "emailAddress": "Something",
    },
        "addressDetails": {
      "addLine1": "Something",
      "addLine2": "Something",
      "city": "Something",
      "state": "Something",
      "country": "Something",
    }
  },
  "openDate": "2019-07-05T09:59:18.601Z",
}

Вопрос: Нужен ли конструктор в DTO.Как назначить идентификатор для объекта DTO / или я должен назначить новый идентификатор в случае пустого значения:

public async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)
{
    req.RequestId = (req.RequestId == null || req.RequestId == "") ? Guid.NewGuid().ToString("N") : req.RequestId;
    _validatorObj.ValidateAndThrow(req, ruleSet: "RequestValidation");
    var result = await _repository.UpsertRequest(req);

    return Response<RequestDto>.Ok(result, "Success");
}

Код в репо:

public async Task<RequestDto> UpsertRequest(RequestDto req)
{
    var jsonReqDet = JsonConvert.SerializeObject(req.requestDetails);
    var entity = _mapper.Map<RequestEntity>(req);
    entity.RowKey = RequestEntity.GetRowKey(req.RequestId);
    entity.PartitionKey = RequestEntity.GetPartKey(req.RequestId);
    entity.RequestDetails = jsonReqDet;
    entity.OpenDate = DateTime.UtcNow;
    await AzureTableAdapter.Upsert(entity, RequestTableName);

    return req;
}

Примечание:

  1. Я получаю весь объект DTO в полезной нагрузке
  2. Я использую хранилище Azure и операцию "InsertOrReplace"
  3. У меня есть таблица запросов с полем requestDetils в качестве строки, чтобы сохранить значение json

Что мне делать?

1 Ответ

0 голосов
/ 10 июля 2019

Наконец

Я обнаружил, что я делаю неправильно.Полезная нагрузка содержит reqId="".Так что даже у меня есть конструктор:

public RequestDto()
{
    RequestId = Guid.NewGuid().ToString("N");
}

после того, как он был инициализирован, из-за подписи контроллера:

public async Task<Response<RequestDto>> UpdateRequest([FromBody]RequestDto req)

идентификатор, инициализированный с нулем.Поэтому я удалил reqId только из полезной нагрузки (во время вставки).Конечная полезная нагрузка, которую я принимаю сейчас:

1. {
  "requestDetails": {
    "basicDetails": {
      "firstName": "Something",
      "lastName": "Something",
      "emailAddress": "Something",
    },
        "addressDetails": {
      "addLine1": "Something",
      "addLine2": "Something",
      "city": "Something",
      "state": "Something",
      "country": "Something",
    }
  },
  "openDate": "2019-07-05T09:59:18.601Z",
}
2. {
  "reqId": "0b5c7dd3931944b28f693ef8bf6fa2ad",
  "requestDetails": {
    "basicDetails": {
      "firstName": "Something",
      "lastName": "Something",
      "emailAddress": "Something",
    },
        "addressDetails": {
      "addLine1": "Something",
      "addLine2": "Something",
      "city": "Something",
      "state": "Something",
      "country": "Something",
    }
  },
  "openDate": "2019-07-05T09:59:18.601Z",
}
...