public SaveResult SaveChanges(JObject saveBundle, TransactionSettings transactionSettings = null) {
if (SaveWorkState == null || SaveWorkState.WasUsed) {
InitializeSaveState(saveBundle);
}
transactionSettings = transactionSettings ?? BreezeConfig.Instance.GetTransactionSettings();
try {
if (transactionSettings.TransactionType == TransactionType.TransactionScope) {
var txOptions = transactionSettings.ToTransactionOptions();
using (var txScope = new TransactionScope(TransactionScopeOption.Required, txOptions)) {
OpenAndSave(SaveWorkState);
txScope.Complete();
}
} else if (transactionSettings.TransactionType == TransactionType.DbTransaction) {
this.OpenDbConnection();
using (IDbTransaction tran = BeginTransaction(transactionSettings.IsolationLevelAs)) {
try {
OpenAndSave(SaveWorkState);
tran.Commit();
} catch {
tran.Rollback();
throw;
}
}
} else {
OpenAndSave(SaveWorkState);
}
} catch (EntityErrorsException e) {
SaveWorkState.EntityErrors = e.EntityErrors;
throw;
} catch(Exception e2) {
if (!HandleSaveException(e2, SaveWorkState)) {
throw;
}
} finally {
CloseDbConnection();
}
return SaveWorkState.ToSaveResult();
}