diff --git a/Src/Asp.NetCore2/SqlSeverTest/UnitTest/UCodeFirst.cs b/Src/Asp.NetCore2/SqlSeverTest/UnitTest/UCodeFirst.cs index f80ffa02b..d70b360a3 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/UnitTest/UCodeFirst.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/UnitTest/UCodeFirst.cs @@ -15,8 +15,31 @@ namespace OrmTest Db.DbMaintenance.DropTable("UnitCodeTest1"); Db.CodeFirst.InitTables(); Db.CodeFirst.InitTables(); + if (Db.DbMaintenance.IsAnyTable("UnitCodeFirst131", false)) + Db.DbMaintenance.DropTable("UnitCodeFirst131"); + Db.CodeFirst.InitTables(); + Db.Insertable(new UnitCodeFirst131() { Id = 1 }).ExecuteCommand(); + Db.CodeFirst.InitTables(); + Db.CodeFirst.InitTables(); + } + public class UnitCodeFirst131 + { + public int Id { get; set; } + } + public class UNITCODEFIRST131 + { + public int Id { get; set; } + [SqlSugar.SugarColumn(DefaultValue ="a")] + public string Name { get; set; } + } + public class UNITCOdEFIRST131 + { + public int Id { get; set; } + [SqlSugar.SugarColumn(DefaultValue = "a")] + public string Name { get; set; } + [SqlSugar.SugarColumn(DefaultValue = "getdate()")] + public DateTime dt { get; set; } } - public class UnitCodeFirstpks2 { [SqlSugar.SugarColumn(IsPrimaryKey =true)] diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index ddf896151..73b02d198 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -196,8 +196,27 @@ namespace SqlSugar public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo) { tableName = this.SqlBuilder.GetTranslationTableName(tableName); + var isAddNotNUll = columnInfo.IsNullable == false && columnInfo.DefaultValue.HasValue(); + if (isAddNotNUll) + { + columnInfo = this.Context.Utilities.TranslateCopy(columnInfo); + columnInfo.IsNullable = true; + } string sql = GetAddColumnSql(tableName, columnInfo); this.Context.Ado.ExecuteCommand(sql); + if (isAddNotNUll) + { + var dtColums = this.Context.Queryable().AS(columnInfo.TableName).Where("1=2").ToDataTable().Columns.Cast(); + var dtColumInfo = dtColums.First(it => it.ColumnName.EqualCase(columnInfo.DbColumnName)); + var type = UtilMethods.GetUnderType(dtColumInfo.DataType); + var value= type==UtilConstants.StringType?(object)"": Activator.CreateInstance(type); + var dt = new Dictionary(); + dt.Add(columnInfo.DbColumnName, value); + this.Context.Updateable(dt) + .AS(tableName) + .Where($"{columnInfo.DbColumnName} is null ").ExecuteCommand(); + UpdateColumn(tableName, columnInfo); + } return true; } public virtual bool UpdateColumn(string tableName, DbColumnInfo column)