#c# #entity-framework #unit-of-work #aspnetboilerplate #change-tracking
#c# #entity-framework #единица работы #aspnetboilerplate #отслеживание изменений
Вопрос:
В рамках моего сервиса ( class MyService : AbpServiceBase
) я пытаюсь выполнить следующее:
- Вставьте объект в SQL и извлеките идентификатор
- Выполните вызов REST для внешней системы и извлеките этот SystemID
- Обновите поле в исходном объекте с помощью SystemID
Ошибка, которую я получаю:
Ожидалось, что операция базы данных повлияет на 1 строку (ы), но фактически повлияла на 0 строк (ов)
[UnitOfWork(isTransactional: false)]
public async Task<Guid> CreateAsync(InfoDto myInfo)
{
int? tenantId = _unitOfWorkManager.Current.GetTenantId();
objInfo = await _infoRepository.InsertAsync(myInfo);
newObjId = CreateNewIdentifier(tenantId);
objInfo.ExternalIdentifier = newObjId;
await _infoRepository.UpdateAsync(objInfo);
return objInfo.Id;
}
Ответ №1:
Вам не нужно UpdateAsync
. objInfo
уже отслеживается.
[UnitOfWork(isTransactional: false)]
public async Task<Guid> CreateAsync(InfoDto myInfo)
{
int? tenantId = _unitOfWorkManager.Current.GetTenantId();
objInfo = await _infoRepository.InsertAsync(myInfo);
newObjId = CreateNewIdentifier(tenantId);
objInfo.ExternalIdentifier = newObjId;
// await _infoRepository.UpdateAsync(objInfo); // Remove this
return objInfo.Id;
}
Ответ №2:
Это всегда так просто, как только вы знаете ответ… Все, что требовалось, — это аннотация. Надеюсь, что другие тоже извлекут выгоду из этого.
[UnitOfWork(isDisabled = true)]