Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }