Пример #1
0
        /// <summary>
        /// Добавляет новый объект в базу данных.
        /// </summary>
        /// <param name="metadataObject">Объект метаданных.</param>
        /// <param name="tableName">Название таблицы</param>
        /// <returns></returns>
        protected int InsertObject(T metadataObject)
        {
            if (metadataObject == null)
            {
                throw new ArgumentNullException("metadataObject");
            }

            //идентификатор созданного объекта.
            int createdID = 0;

            string tableName = this.GetTableName(metadataObject);

            if (String.IsNullOrEmpty(tableName))
            {
                throw new Exception(String.Format("Не удалось определить конечную таблицу для объекта {0} типа {1}", metadataObject.ToString(), metadataObject.GetType().Name));
            }

            DBObjectDistributedTable table        = this.MetadataAdapter.TableActivator.EnsureDistributedTable(this.DBSchemaAdapter, tableName);
            MetadataQueryBuilder     queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition);

            string insertQuery = @"
            {InsertQuery}
            SELECT SCOPE_IDENTITY() AS CreatedID, @@ROWCOUNT AS AffectedRowsCount"
                                 .ReplaceKey("InsertQuery", queryBuilder.InsertQuery);

            DBCollection <SqlParameter> insertParams = this.CreateInsertParameters(metadataObject);
            DataRow insertResult = this.DataAdapter.GetDataRow(insertQuery, insertParams.ToArray());

            if (insertResult == null)
            {
                throw new Exception(string.Format("Не удалось получить результат создания объекта."));
            }

            DataRowReader insertResultReader = new DataRowReader(insertResult);
            int           affectedRowsCount  = insertResultReader.GetIntegerValue("AffectedRowsCount");

            //если объект по заданному условию уже существовал, устанавливаем идентификатор созданного элемента равный -1.
            if (affectedRowsCount == 0)
            {
                createdID = -1;
            }
            //проставляем свойства созданного списка
            else
            {
                createdID = insertResultReader.GetIntegerValue("CreatedID");
                if (createdID == 0)
                {
                    throw new Exception("Не удалось получить идентификатор созданного объекта.");
                }
            }

            //возвращаем идентификатор созданного объекта.
            return(createdID);
        }
Пример #2
0
        protected int InsertObject(T metadataObject)
        {
            //идентификатор созданного объекта.
            int createdID = 0;

            string insertQuery = @"
            {InsertQuery}
            SELECT SCOPE_IDENTITY() AS CreatedID, @@ROWCOUNT AS AffectedRowsCount"
                                 .ReplaceKey("InsertQuery", this.InsertQuery);

            DBCollection <SqlParameter> insertParams = this.CreateInsertParameters(metadataObject);
            DataRow insertResult = this.DataAdapter.GetDataRow(insertQuery, insertParams.ToArray());

            if (insertResult == null)
            {
                throw new Exception(string.Format("Не удалось получить результат создания объекта."));
            }

            DataRowReader insertResultReader = new DataRowReader(insertResult);
            int           affectedRowsCount  = insertResultReader.GetIntegerValue("AffectedRowsCount");

            //если объект по заданному условию уже существовал, устанавливаем идентификатор созданного элемента равный -1.
            if (affectedRowsCount == 0)
            {
                createdID = -1;
            }
            //проставляем свойства созданного списка
            else
            {
                createdID = insertResultReader.GetIntegerValue("CreatedID");
                if (createdID == 0)
                {
                    throw new Exception("Не удалось получить идентификатор созданного объекта.");
                }
            }

            //возвращаем идентификатор созданного объекта.
            return(createdID);
        }
Пример #3
0
        /// <summary>
        /// Обновляет существующий объект в базе данных.
        /// </summary>
        /// <param name="metadataObject">Объект метаданных.</param>
        /// <returns></returns>
        protected bool UpdateObject(T metadataObject)
        {
            if (metadataObject == null)
            {
                throw new ArgumentNullException("metadataObject");
            }

            //приводим объект к типу метаданных.
            IMetadataObject metadata = this.GetMetadataObject(metadataObject);

            if (metadata.ID == 0)
            {
                throw new ArgumentNullException("metadata.ID", "Не передан идентификатор объекта.");
            }

            //формируем условие обновления объекта по идентификатору.
            string identityCondition = string.Format("[ID] = {1}", this.IdentityColumn.Name, metadata.ID);

            //запрос обновления объекта метаданных.
            string updateQuery = @"
{UpdateQuery}
WHERE {IdentityCondition}
SELECT @@ROWCOUNT"
                                 .ReplaceKey("UpdateQuery", this.UpdateQuery)
                                 .ReplaceKey("IdentityCondition", identityCondition)
            ;


            //формируем параметры обновления, соответствующие значениям свойств объекта.
            DBCollection <SqlParameter> updateParams = this.CreateInsertParameters(metadataObject);

            //выполняем запрос.
            int affectedRowsCount = this.DataAdapter.GetScalarValue <int>(updateQuery, updateParams.ToArray());

            return(affectedRowsCount > 0);
        }
Пример #4
0
        /// <summary>
        /// Обновляет существующий объект в базе данных.
        /// </summary>
        /// <param name="metadataObject">Объект метаданных.</param>
        /// <returns></returns>
        protected bool UpdateObject(T metadataObject)
        {
            if (metadataObject == null)
            {
                throw new ArgumentNullException("metadataObject");
            }

            string tableName = this.GetTableName(metadataObject);

            if (String.IsNullOrEmpty(tableName))
            {
                throw new Exception(String.Format("Не удалось определить конечную таблицу для объекта {0} типа {1}", metadataObject.ToString(), metadataObject.GetType().Name));
            }

            DBObjectDistributedTable table        = this.MetadataAdapter.TableActivator.GetDistributedTable(this.DBSchemaAdapter, tableName);
            MetadataQueryBuilder     queryBuilder = new MetadataQueryBuilder(table.TablePartition.Table, this.TypeDefinition);

            //приводим объект к типу метаданных.
            IMetadataObject metadata = this.GetMetadataObject(metadataObject);

            if (metadata.ID == 0)
            {
                throw new ArgumentNullException("metadata.ID", "Не передан идентификатор объекта.");
            }

            //формируем условие обновления объекта по идентификатору.
            string identityCondition = string.Format("[ID] = {1}", table.TablePartition.Table.IdentityColumn.Name, metadata.ID);

            //запрос обновления объекта метаданных.
            string updateQuery = @"
{UpdateQuery}
WHERE {IdentityCondition}
SELECT @@ROWCOUNT"
                                 .ReplaceKey("UpdateQuery", queryBuilder.UpdateQuery)
                                 .ReplaceKey("IdentityCondition", identityCondition)
            ;


            //формируем параметры обновления, соответствующие значениям свойств объекта.
            DBCollection <SqlParameter> updateParams = this.CreateInsertParameters(metadataObject);

            //выполняем запрос.
            int affectedRowsCount = this.DataAdapter.GetScalarValue <int>(updateQuery, updateParams.ToArray());

            return(affectedRowsCount > 0);
        }