Ejemplo n.º 1
0
        /// <summary>
        /// Из БД вычитывается объект и определяются, какие значения после сохранения в БД приняли поля с атрибутом DisableInsertPropertyAttribute.
        /// Зачитка объекта идёт в той же транзакции, что и были обновлены объекты.
        /// </summary>
        /// <param name="transaction">Транзакция, в рамках которой нужно производить зачитку.</param>
        /// <param name="sqlDataService">Сервис данных, с помощью которого нужно проводить зачитку.</param>
        public void SetNewFieldValues(IDbTransaction transaction, SQLDataService sqlDataService)
        {
            if (_auditRecordPrimaryKey == null)
            {
                throw new NullReferenceException("Идентификатор записи аудита не определён.");
            }

            if (!_keptFieldsValues.Any())
            {
                return;
            }

            if (_objectPrimaryKey == null)
            {
                throw new NullReferenceException("Идентификатор записи объекта не определён.");
            }

            var objectType     = Type.GetType(_assemblyQualifiedObjectType, true);
            var view           = ConstructViewForKeptFields();
            var objectInstanse = (DataObject)Activator.CreateInstance(objectType);

            objectInstanse.SetExistObjectPrimaryKey(_objectPrimaryKey);
            objectInstanse.InitDataCopy();

            sqlDataService.LoadObjectByExtConn(
                view, objectInstanse, true, true, new DataObjectCache(), transaction.Connection, transaction);

            foreach (var keptFieldsValue in _keptFieldsValues)
            {
                var propertyValue = objectType.GetProperty(keptFieldsValue.Key).GetValue(objectInstanse, null);
                _keptFieldsValues[keptFieldsValue.Key].NewValue =
                    propertyValue == null
                    ? null
                    : propertyValue.ToString();
            }
        }