public void Delete(ISagaData sagaData) { var collection = database.GetCollection(collectionName); if (Transaction.Current != null) { var hack = new AmbientTxHack(() => collection.Remove(Query.EQ("_id", sagaData.Id))); Transaction.Current.EnlistVolatile(hack, EnlistmentOptions.None); } else { collection.Remove(Query.EQ("_id", sagaData.Id)); } }
public void Store(Type messageType, string subscriberInputQueue) { var collection = database.GetCollection(collectionName); if (Transaction.Current != null) { var hack = new AmbientTxHack(() => DoAdd(messageType, subscriberInputQueue, collection)); Transaction.Current.EnlistVolatile(hack, EnlistmentOptions.None); } else { DoAdd(messageType, subscriberInputQueue, collection); } }
public void Save(ISagaData sagaData, string[] sagaDataPropertyPathsToIndex) { var collection = database.GetCollection(collectionName); if (!indexCreated) { foreach (var propertyToIndex in sagaDataPropertyPathsToIndex) { collection.EnsureIndex(IndexKeys.Ascending(propertyToIndex), IndexOptions.SetBackground(false)); } indexCreated = true; } // if an ambient TX is present, enlist the insert to be performed at commit time if (Transaction.Current != null) { var hack = new AmbientTxHack(() => collection.Save(sagaData, SafeMode.True)); Transaction.Current.EnlistVolatile(hack, EnlistmentOptions.None); } else { collection.Save(sagaData, SafeMode.True); } }