Beispiel #1
0
        /// <summary>
        /// Удаление модели данных командой
        /// </summary>
        /// <returns></returns>
        public virtual Exception Delete()
        {
            object keyValue = GetProperty <object>(SchemaTableManager.GetPrimaryKeyField(this.GetType()));

            if (_dataAdapter != null && _dataAdapter.DeleteCommand != null)
            {
                UniDbCommand deleteCmd = new UniDbCommand(_dataAdapter.DeleteCommand.CommandText, this.Connection);
                if (_dataAdapter.DeleteCommand.Parameters.Count > 0)
                {
                    UniParameter p = _dataAdapter.DeleteCommand.Parameters[0];
                    deleteCmd.Parameters.Add(p.ParameterName, p.UniDbType, keyValue);
                }
                else
                {
                    deleteCmd.Parameters.Add("p_" + SchemaTableManager.GetPrimaryKeyField(this.GetType()), UniDbType.Decimal, keyValue);
                }
                return(ExecuteDeleteCommand(deleteCmd));
            }
            else
            {
                UniDbCommand deleteCmd = UniCommandBuilder.GetDeleteCommand(SchemaTable, TableName, SchemaTableManager.GetUpdatedColumns(TableName, DataTable));
                deleteCmd.Parameters[0].Value        = keyValue;
                deleteCmd.Parameters[0].SourceColumn = string.Empty;
                return(ExecuteDeleteCommand(deleteCmd));
            }
        }
Beispiel #2
0
        /// <summary>
        /// Получаем класс и данные (если существуют)
        /// </summary>
        /// <typeparam name="T">Тип создаваемых данных</typeparam>
        /// <param name="primaryKeyValue">Значение первичного ключа</param>
        /// <param name="ds">Набор данных если требуется</param>
        /// <returns>Возвращает элемент созданный</returns>
        public static T GetOrCreate <T>(object primaryKeyValue, DataSet ds = null) where T : UniDbModel, new()
        {
            if (ds == null)
            {
                ds = new DataSet();
            }
            string    tableName  = SchemaTableManager.GetDbTableName(typeof(T));
            string    schemaName = SchemaTableManager.GetSchemaName(typeof(T));
            DataTable table      = null;

            if (!ds.Tables.Contains(tableName)) // если таблицы нету, то надо создать с структурой указанной в модели таблицу.
            {
                table = SchemaTableManager.CreateTable(tableName, schemaName);
                ds.Tables.Add(table);
            }
            else
            {
                table = ds.Tables[tableName];
            }
            T res = new T();

            res.DataTable = table;
            res.GetDbRowData(primaryKeyValue);
            if (res.DataRow == null)
            {
                DataRow row = res.DataTable.NewRow();
                res.DataTable.Rows.Add(row);
                res.DataRow = row;
            }
            return(res);
        }
Beispiel #3
0
 public UniDbModel() : base()
 {
     _connection = UniDbConnection.Current;
     if (string.IsNullOrWhiteSpace(TableName))
     {
         TableName = SchemaTableManager.GetDbTableName(this.GetType());
     }
     if (string.IsNullOrWhiteSpace(SchemaTable))
     {
         SchemaTable = SchemaTableManager.GetSchemaName(this.GetType());
     }
 }
Beispiel #4
0
        /// <summary>
        /// Инициализация адаптера сохранения данных
        /// </summary>
        public virtual void InitializeAdapter()
        {
            _dataAdapter = new UniDbAdapter();
            UniSchemaColumn[] cols = SchemaTableManager.GetUpdatedColumns(TableName, DataTable).ToArray();
            if (cols == null)
            {
                return;
            }

            _dataAdapter.AcceptChangesDuringUpdate = false;

            _dataAdapter.InsertCommand = UniCommandBuilder.GetInsertCommand(SchemaTable, TableName, cols);
            _dataAdapter.UpdateCommand = UniCommandBuilder.GetUpdateCommand(SchemaTable, TableName, cols);
            _dataAdapter.DeleteCommand = UniCommandBuilder.GetDeleteCommand(SchemaTable, TableName, cols);
        }
Beispiel #5
0
        /// <summary>
        /// Метод получения столбцов для обновления или добавления данных
        /// </summary>
        /// <returns>Возвращает список столбцов которые терубется обновлять в базе данных</returns>
        public static IEnumerable <UniSchemaColumn> GetUpdatedColumns(string tableName, DataTable table = null)
        {
            UniSchemaTable stable = SchemaTableManager.GetTable(tableName); //здесь требуется реализовать чтение схемы таблицы из текстового файла Реализую позже кажется реализовал

            if (stable != null)
            {
                return(stable.Columns);
            }
            else
            {
                return(table.Columns.Cast <DataColumn>().Select(r => new UniSchemaColumn()
                {
                    ColumnName = r.ColumnName,
                    DbColumnName = r.ColumnName,
                    ColumnType = r.DataType,
                    DbColumnType = UniDbTypeHelper.GetUniDbType(r.DataType),
                    IsPrimaryKey = (r.ColumnName).Equals(tableName + "_ID", StringComparison.OrdinalIgnoreCase)
                }));
            }
        }