/// <summary> /// Updates an object in the data store. /// </summary> /// <typeparam name="TObject">The type of the object.</typeparam> /// <param name="dbCollectionName">The name of the database collection.</param> /// <param name="parser">The WITSML query parser.</param> /// <param name="uri">The data object URI.</param> /// <exception cref="WitsmlException"></exception> protected void UpdateEntity <TObject>(string dbCollectionName, WitsmlQueryParser parser, EtpUri uri) { try { Logger.DebugFormat("Updating {0} MongoDb collection", dbCollectionName); var collection = GetCollection <TObject>(dbCollectionName); var current = GetEntity <TObject>(uri, dbCollectionName); var updates = MongoDbUtility.CreateUpdateFields <TObject>(); var ignores = MongoDbUtility.CreateIgnoreFields <TObject>(GetIgnoredElementNamesForUpdate(parser)); var update = new MongoDbUpdate <TObject>(Container, collection, parser, IdPropertyName, ignores); update.Update(current, uri, updates); var transaction = Transaction; transaction.Attach(MongoDbAction.Update, dbCollectionName, IdPropertyName, current.ToBsonDocument(), uri); transaction.Save(); AuditUpdate(uri); } catch (MongoException ex) { Logger.ErrorFormat("Error updating {0} MongoDb collection: {1}", dbCollectionName, ex); throw new WitsmlException(ErrorCodes.ErrorUpdatingInDataStore, ex); } }
/// <summary> /// Validates the array element. /// </summary> /// <param name="propertyInfo">The property information.</param> /// <param name="type">The type.</param> /// <param name="element">The element.</param> /// <param name="propertyPath">The property path.</param> protected void ValidateArrayElement(PropertyInfo propertyInfo, Type type, XElement element, string propertyPath) { var validator = new MongoDbUpdate <T>(Container, Collection, Parser, IdPropertyName, Context.Ignored); validator.Context.ValidationOnly = true; validator.NavigateElementType(propertyInfo, type, element, propertyPath); }