/// <summary> /// Updates the item in the data store /// </summary> /// <remarks>Error codes follow the format DAL-CM-6XX</remarks> /// <typeparam name="I">The item type to update against</typeparam> /// <param name="item">Class implementing the property edit interface</param> /// <param name="dataResult">Optional data result interface</param> /// <returns>Returns the item sent</returns> public async Task <I> Update <I>(I item, IDataResult dataResult = null) where I : IId { //create update var update = BuildUpdate <I>(item); //call simple update var result = await SimpleUpdate <T>(item.Id, update, CollectionName, CollectionNameAudit, CollectionName + ".Update"); if (dataResult != null) { dataResult.SetDataResults(result.IsAcknowledged, result.IsModifiedCountAvailable, result.MatchedCount, result.ModifiedCount); } //return item return(item); }
/// <summary> /// Saves the item to the data store /// This will Upsert the entire item so use with care /// </summary> /// <remarks>Error codes follow the format DAL-CM-5XX</remarks> /// <param name="item">The full item to save</param> /// <param name="dataResult">Optional data result interface</param> /// <param name="create">Optional create parameter used for the data result to mark as complete</param> /// <returns>Returns the item sent</returns> public async Task <T> Save(T item, IDataResult dataResult = null, bool create = false) { //audit item await AuditItem <T>(item, CollectionName, CollectionName + ".Save"); //get the collection and do replace one var collection = Repository.Database.GetCollection <T>(CollectionName); var result = await collection.ReplaceOneAsync(x => x.Id == item.Id, item, new UpdateOptions { IsUpsert = true }); if (dataResult != null) { dataResult.SetDataResults(result.IsAcknowledged, result.IsModifiedCountAvailable, result.MatchedCount, result.ModifiedCount, (create) ? 0 : 1, (create) ? 0 : 1); } return(item); }