/// <summary> /// 加载指定数据库中的每个表的所有列 /// </summary> /// <param name="database">需要加载列的数据库对象</param> protected override void LoadAllColumns(Database database) { foreach (Table table in database.Tables) { using (var columnsReader = this.Db.QueryDataReader(@"SHOW FULL COLUMNS FROM `" + table.Name + "`;")) { while (columnsReader.Read()) { string columnName = columnsReader["Field"].ToString(); string sqlType = columnsReader["Type"].ToString(); DbType dbType = SQLiteDbTypeHelper.ConvertFromSQLiteTypeString(sqlType); Column column = new Column(columnName, dbType, null, table); column.IsRequired = string.Compare(columnsReader["Null"].ToString(), "Yes", true) != 0; table.Columns.Add(column); } table.SortColumns(); } } }
/// <summary> /// 生成更新备注信息 /// </summary> /// <param name="op">更新备注的实体对象</param> protected override void Generate(UpdateComment op) { if (string.IsNullOrEmpty(op.ColumnName)) { this.AddRun(new SqlMigrationRun { Sql = string.Format(@"ALTER TABLE `{0}` COMMENT '{1}';", this.Prepare(op.TableName), op.Comment) }); } else { //SQLite 不支持外键修改备注,所以过滤掉外键修改备注 if (string.Compare(op.ColumnName, "id", true) != 0 && string.Compare(op.TableName, "BlogUser") != 0) { this.AddRun(new SqlMigrationRun { Sql = string.Format(@"ALTER TABLE `{0}` MODIFY COLUMN `{1}` {2} COMMENT '{3}';", this.Prepare(op.TableName), this.Prepare(op.ColumnName), SQLiteDbTypeHelper.ConvertToSQLiteTypeString(op.ColumnDataType), op.Comment) }); } } }
/// <summary> /// 把Clr的数据类型转型为SQLite的数据类型 /// </summary> /// <param name="dataType">数据类型</param> /// <param name="length">数据长度</param> /// <returns>返回SQLite的数据类型</returns> protected override string ConvertToTypeString(DbType dataType, string length) { return(SQLiteDbTypeHelper.ConvertToSQLiteTypeString(dataType, length)); }