Je suis assez nouveau pour les transactions EF, c'est le code qui est utilisé pour sauverSubstitution de SaveChangesAsync lorsqu'il est inclus dans TransactionScope?
public bool Save(TbArea area, bool isNew, out string errMsg)
{
try
{
errMsg = string.Empty;
using (var oScope = new System.Transactions.TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(120)))
{
try
{
TbArea oEntity = oContext.TbArea.Where(a => a.AreaCode == area.AreaCode && a.CompanyId == MainClass.SystemCompanyId).FirstOrDefault();
if (oEntity != null)
{
if (isNew) { errMsg = Resources.ResSales.MsgRecordCodeDublicated; return false; }
oContext.TbArea.Attach(oEntity);
oContext.Entry(oEntity).CurrentValues.SetValues(area);
}
else
{
if (!isNew) { errMsg = Resources.ResSales.MsgRecordNotFoundInDB; return false; }
oContext.TbArea.Add(area);
}
oContext.SaveChangesAsync();
oScope.Complete();
return true;
}
catch (Exception ex)
{
oScope.Dispose();
errMsg = ex.Message;
return false;
}
}
Je suis remplaçant SaveChangesAsync
pour que je puisse enregistrer le ChangeTracker.Entries
dans la base de données. ceci est une partie du code:
dbContext.AcceptAllChanges();
logsSet.AddRange(audits);
int result = 0;
try
{
result = await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
//scope.Complete(); there was a transaction that I commented out, I thought it might overlaps the original transaction!
return result;
}
catch (Exception ex)
{
var m = ex.Message;
return result;
}
Lorsque j'enregistre un élément, je reçois l'erreur:
la transaction a avorté
lorsque je retire la portée de transaction, la l'économie se produit normalement!
Pourquoi avez-vous mentionné l'horodatage ?? Est-ce une opération de journalisation? –
Non, je l'ai enlevé et toujours obtenir la même erreur –
J'ai déplacé le TransactionScope à la méthode substituée et cela fonctionne maintenant –