From d12c8fed02a1936299ddfeabe4a6e7bf3cd0e43a Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 17 Jun 2017 23:50:28 +0800 Subject: [PATCH] Code First --- .../CodeFirstProvider/CodeFirstProvider.cs | 14 +++++++++++++- .../Abstract/DbMaintenanceProvider/Methods.cs | 18 +++++++++++++++++- SqlSugar/Interface/IDbMaintenance.cs | 3 ++- .../DbMaintenance/SqlServerDbMaintenance.cs | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index b324adf0c..777ce37f2 100644 --- a/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -80,14 +80,26 @@ namespace SqlSugar var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); var droupColumns = dbColumns.Where(dbColumn => !entityInfo.Columns.Any(entityCoulmn => dbColumn.DbColumnName.Equals(entityCoulmn.DbColumnName))).ToList(); var addColumns= entityInfo.Columns.Where(entityColumn => !dbColumns.Any(dbColumn => entityColumn.DbColumnName.Equals(dbColumn.DbColumnName))).ToList(); + var alterColumns = dbColumns.Where(dbColumn => entityInfo.Columns + .Any(entityCoulmn => + dbColumn.DbColumnName.Equals(entityCoulmn.DbColumnName) + &&((entityCoulmn.Length!=dbColumn.Length&&PubMethod.GetUnderType(entityCoulmn.PropertyInfo).IsIn(PubConst.StringType))||entityCoulmn.IsNullable!=dbColumn.IsNullable) + )).ToList(); foreach (var item in addColumns) { - this.Context.DbMaintenance.AddColumnToTable(tableName,EntityColumnToDbColumn(entityInfo,tableName,item)); + this.Context.DbMaintenance.AddColumn(tableName,EntityColumnToDbColumn(entityInfo,tableName,item)); } foreach (var item in droupColumns) { this.Context.DbMaintenance.DropColumn(tableName,item.DbColumnName); } + foreach (var item in alterColumns) + { + var newitem = this.Context.RewritableMethods.TranslateCopy(item); + newitem.IsPrimarykey = false; + newitem.IsIdentity = false; + this.Context.DbMaintenance.UpdateColumn(tableName, newitem); + } } } #endregion diff --git a/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 709571e8e..d54cdcc9e 100644 --- a/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -86,12 +86,17 @@ namespace SqlSugar this.Context.Ado.ExecuteCommand(sql); return true; } - public virtual bool AddColumnToTable(string tableName, DbColumnInfo columnInfo) + public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo) { string sql = GetAddColumnSql(tableName, columnInfo); this.Context.Ado.ExecuteCommand(sql); return true; } + public virtual bool UpdateColumn(string tableName, DbColumnInfo column) { + string sql = GetUpdateColumnSql(tableName,column); + this.Context.Ado.ExecuteCommand(sql); + return true; + } public virtual bool CreateTable(string tableName, List columns) { string sql = GetCreateTableSql(tableName, columns); @@ -183,6 +188,17 @@ namespace SqlSugar string result = string.Format(this.AddColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity); return result; } + private string GetUpdateColumnSql(string tableName, DbColumnInfo columnInfo) + { + string columnName = columnInfo.DbColumnName; + string dataType = columnInfo.DataType; + string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null; + string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull; + string primaryKey = columnInfo.IsPrimarykey ? this.CreateTablePirmaryKey : null; + string identity = columnInfo.IsIdentity ? this.CreateTableIdentity : null; + string result = string.Format(this.AlterColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity); + return result; + } #endregion } } diff --git a/SqlSugar/Interface/IDbMaintenance.cs b/SqlSugar/Interface/IDbMaintenance.cs index 2872c0726..1229ef78a 100644 --- a/SqlSugar/Interface/IDbMaintenance.cs +++ b/SqlSugar/Interface/IDbMaintenance.cs @@ -27,7 +27,8 @@ namespace SqlSugar bool DropTable(string tableName); bool TruncateTable(string tableName); bool CreateTable(string tableName, List columns); - bool AddColumnToTable(string tableName, DbColumnInfo column); + bool AddColumn(string tableName, DbColumnInfo column); + bool UpdateColumn(string tableName, DbColumnInfo column); bool AddPrimaryKey(string tableName,string columnName); bool DropConstraint(string tableName, string constraintName); bool BackupDataBase(string databaseName,string fullFileName); diff --git a/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs b/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs index 3deb3a494..386675aa7 100644 --- a/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs +++ b/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs @@ -93,7 +93,7 @@ namespace SqlSugar { get { - return "ALTER TABLE {0} ALTER COLUMN {1}{2} {3} "; + return "ALTER TABLE {0} ALTER COLUMN {1} {2}{3} {4} {5} {6}"; } } protected override string BackupDataBaseSql