Я хочу зафиксировать ошибку из структуры сущностей.
Итак, у меня есть следующий код
return await _context.SaveChangesAsync(cancellationToken);
, если что-то идет не так в приведенном выше коде, я хочу, чтобы оно было записано какпредупреждение в базе данных, но на данный момент оно автоматически сохраняется в базе данных как ошибка, которая должна быть предупреждением на самом деле.
ниже - ошибка, которую я получаю
Исключение произошло вбаза данных при сохранении изменений для типа контекста 'ValuationsReporting.Models.ValuationsReportingContext'. System.InvalidOperationException: свойство TemplateTypeId для типа сущности ValuationFundTemplate имеет временное значение. Либо задайте постоянное значение явно, либо убедитесь, что база данных настроена для генерации значений для этого свойства. в Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.Validate (ModificationCommandificationCommand) в Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparer.BatchCommands (параметры IReadOnlyList * 101.ExignEgnSecure. TState, TResult] (Func 4
operation, Func
4 verifySucceeded, состояние TState, CancellationToken cancellationToken) в Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync [TState, TResult] (Func 4
operation, Func
4 verifySucceeded, TSen отмены, состояние при отмене, состояние при отмене, состояние при отмене, состояние при отмене, состояние TState, состояние отмены, состояние при отмене, состояние при нажатииEntityFrameworkCore.ChangeTracking.Internal.StateManager. hangesAsync (Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
System.InvalidOperationException
Microsoft.EntityFrameworkCore.Update
Я пытался использовать try catch, но как только он переходит кстрока ошибка регистрируется в базе данных.
Фактический код:
try
{
foreach (var template in snapshotDto.SnapshopFundTemplateDtos)
{
if (template.FundId != null)
{
foreach (var fundId in template.FundId)
{
var tempTemplate = allFundTemplates.Where(x => x.ValuationId == valuation.Id && x.FundId == fundId && x.TemplateTypeId == template.TemplateTypeId).FirstOrDefault();
//var tempTemplate = await _valuationFundTemplateRepository.GetOne(valuation.Id, fundId, template.TemplateTypeId, true, cancellationToken);
if (tempTemplate == null)
{
tempTemplate = new ValuationFundTemplate();
tempTemplate.CreatedBy = _userRepository.claimsPrincipal.Identity.Name;
tempTemplate.CreatedOn = DateTime.Now.ToUniversalTime();
isTemplateUpdate = false;
}
//tempTemplate.IsDeleted = false;
//if (template.IsDeleted)
//{
// _valuationFundTemplateRepository.Delete(tempTemplate);
//}
//else
//{
//tempTemplate.IsDeleted = template.IsDeleted;
tempTemplate.IsDeleted = false;
tempTemplate.IsDefaultFundTemplate = template.IsDefault;
tempTemplate.FundId = fundId;
tempTemplate.ValuationId = valuation.Id;
tempTemplate.TemplateTypeId = 0;
tempTemplate.TemplateId = template.TemplateId;
tempTemplate.ModifiedBy = _userRepository.claimsPrincipal.Identity.Name;
tempTemplate.ModifiedOn = DateTime.Now.ToUniversalTime();
tempTemplates.Add(tempTemplate);
if (isTemplateUpdate)
{
_valuationFundTemplateRepository.Update(tempTemplate);
}
else
{
await _valuationFundTemplateRepository.Insert(tempTemplate, cancellationToken);
}
// }
await _valuationFundTemplateRepository.SaveAsync(cancellationToken);//here is where the error occurs which i dont want to capture in database.
if (!isTemplateUpdate)
valuation.ValuationFundTemplate.Add(tempTemplate);
}
}
}
}catch(Exception e)
{
var z = e.Message;
}
public virtual async Task<int> SaveAsync(CancellationToken cancellationToken = default(CancellationToken))
{
return await _context.SaveChangesAsync(cancellationToken);
}