I am implementing my own UnitOfWork for an EntityFramework-DataContext.
I want to call SaveChangesAsync and when this succeeds, clear a list. Is my approach with ContinueWith correct?
public async Task<int> CommitAsync(int? commandTimeout = null, bool ignoreCustomLogic = false)
{
try
{
return await DataContext.SaveChangesAsync().ContinueWith((antecedent) =>
{
if (!antecedent.IsFaulted)
{
_addedEntities.Clear();
_changedEntities.Clear();
_deletedEntities.Clear();
}
return antecedent.Result;
});
}
catch (DbEntityValidationException dbEx)
{
RethrowException(dbEx);
return default(int);
}
}
private void RethrowException(DbEntityValidationException dbEx)
{
string message = "ValidationExceptions: " + Environment.NewLine;
foreach (var validationResult in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationResult.ValidationErrors)
{
message += string.Format("Property: {0} Error: {1}{2}", validationError.PropertyName, validationError.ErrorMessage, Environment.NewLine);
}
}
throw new Exception(message, dbEx);
}