Пример #1
0
 /// <summary>
 /// Convert a saveBundle into a SaveMap
 /// </summary>
 public static Dictionary<Type, List<EntityInfo>> Convert(JObject saveBundle)
 {
     var dynSaveBundle = (dynamic) saveBundle;
     var entitiesArray = (JArray) dynSaveBundle.entities;
     var provider = new SaveBundleToSaveMap();
     var saveWorkState = new SaveWorkState(provider, entitiesArray);
     return saveWorkState.SaveMap;
 }
Пример #2
0
    protected void InitializeSaveState(JObject saveBundle)
    {
      JsonSerializer = CreateJsonSerializer();

      var dynSaveBundle = (dynamic)saveBundle;
      var entitiesArray = (JArray)dynSaveBundle.entities;
      var dynSaveOptions = dynSaveBundle.saveOptions;
      SaveOptions = (SaveOptions)JsonSerializer.Deserialize(new JTokenReader(dynSaveOptions), typeof(SaveOptions));
      SaveWorkState = new SaveWorkState(this, entitiesArray);
    }
Пример #3
0
 public void SaveChanges(SaveWorkState saveWorkState)
 {
     lock (__lock)
     {
         _keyMappings.Clear();
         var saveMap = saveWorkState.SaveMap;
         SaveTodoLists(saveMap);
         SaveTodoItems(saveMap);
         // ToList effectively copies the _keyMappings so that an incoming SaveChanges call doesn't clear the 
         // keyMappings before the previous version has completed serializing. 
         saveWorkState.KeyMappings = _keyMappings.ToList();
     }
 }
Пример #4
0
    public SaveResult SaveChanges(JObject saveBundle, TransactionSettings transactionSettings = null) {
      JsonSerializer = CreateJsonSerializer();

      var dynSaveBundle = (dynamic)saveBundle;
      var entitiesArray = (JArray)dynSaveBundle.entities;
      var dynSaveOptions = dynSaveBundle.saveOptions;
      SaveOptions = (SaveOptions) JsonSerializer.Deserialize(new JTokenReader(dynSaveOptions), typeof(SaveOptions));
      SaveWorkState = new SaveWorkState(this, entitiesArray);

      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();

    }
Пример #5
0
 protected abstract void SaveChangesCore(SaveWorkState saveWorkState);
Пример #6
0
 // allows subclasses to plug in own save exception handling
 // either throw an exception here, return false or return true and modify the saveWorkState.
 protected virtual bool HandleSaveException(Exception e, SaveWorkState saveWorkState)
 {
     return(false);
 }
Пример #7
0
 protected abstract void SaveChangesCore(SaveWorkState saveWorkState);
Пример #8
0
 private void OpenAndSave(SaveWorkState saveWorkState) {
   
   OpenDbConnection();    // ensure connection is available for BeforeSaveEntities
   saveWorkState.BeforeSave();
   SaveChangesCore(saveWorkState);
   saveWorkState.AfterSave();
 }
Пример #9
0
 // allows subclasses to plug in own save exception handling
 // either throw an exception here, return false or return true and modify the saveWorkState.
 protected virtual bool HandleSaveException(Exception e, SaveWorkState saveWorkState) {
   return false;
 }
Пример #10
0
 protected override void SaveChangesCore(SaveWorkState saveWorkState) {
   throw new NotImplementedException();
 }
 protected override void SaveChangesCore(SaveWorkState saveWorkState) {
   Context.SaveChanges(saveWorkState);
 }
Пример #12
0
 /// <summary>
 /// The default implementation calls SavesChangesCore to maintain compatiblity with existing
 /// ContextProvider implementations.
 /// </summary>
 /// <param name="saveWorkState"></param>
 /// <param name="cancellationToken"></param>
 /// <returns></returns>
 protected virtual Task SaveChangesCoreAsync(SaveWorkState saveWorkState, CancellationToken cancellationToken)
 {
     SaveChangesCore(saveWorkState);
     return(Task.FromResult(0));
 }