Есть функция контроллера задач, которая получила полезную нагрузку в 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;
}
Примечание:
- Я получаю весь объект DTO в полезной нагрузке
- Я использую хранилище Azure и операцию "InsertOrReplace"
- У меня есть таблица запросов с полем requestDetils в качестве строки, чтобы сохранить значение json
Что мне делать?