diff --git a/SqlServerTest/Demos/5_CodeFirst.cs b/SqlServerTest/Demos/5_CodeFirst.cs index f6790c6a8..afcfc756d 100644 --- a/SqlServerTest/Demos/5_CodeFirst.cs +++ b/SqlServerTest/Demos/5_CodeFirst.cs @@ -20,6 +20,7 @@ namespace OrmTest.Demo public DateTime? DateTime { get; set; } [SugarColumn(IsNullable = true)] public double? Dob { get; set; } + public string A { get; set; } } public class CodeFirst : DemoBase { @@ -32,9 +33,9 @@ namespace OrmTest.Demo IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute }); - if (db.DbMaintenance.IsAnyTable("CodeTable")) - db.DbMaintenance.DropTable("CodeTable"); - db.DbMaintenance.BackupDataBase("SqlSugar4XTest","c:\\back\\1.bak"); + //if (db.DbMaintenance.IsAnyTable("CodeTable")) + // db.DbMaintenance.DropTable("CodeTable"); + //db.DbMaintenance.BackupDataBase("SqlSugar4XTest","c:\\back\\1.bak"); db.CodeFirst.InitTables(typeof(CodeTable)); } } diff --git a/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index ebdb8111d..75f16fa05 100644 --- a/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -55,24 +55,6 @@ namespace SqlSugar } } } - - public ICodeFirst IsBackupData(bool isBackupData = true) - { - _isBackupData = isBackupData; - return this; - } - - public ICodeFirst IsBackupTable(bool isBackupTable = false) - { - _isBackupTable = isBackupTable; - return this; - } - - public ICodeFirst IsDeleteNoExistColumn(bool isDeleteNoExistColumn = true) - { - _isDeleteNoExistColumn = isDeleteNoExistColumn; - return this; - } #endregion #region Core @@ -95,19 +77,7 @@ namespace SqlSugar { foreach (var item in entityInfo.Columns) { - DbColumnInfo dbColumnInfo = new DbColumnInfo() - { - Length = item.Length, - DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name), - TableId = entityInfo.Columns.IndexOf(item), - DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, - IsPrimarykey = item.IsPrimarykey, - IsIdentity = item.IsIdentity, - TableName = tableName, - IsNullable = item.IsNullable, - DefaultValue = item.DefaultValue, - ColumnDescription = item.ColumnDescription - }; + DbColumnInfo dbColumnInfo = EntityColumnToDbColumn(entityInfo, tableName, item); columns.Add(dbColumnInfo); } } @@ -116,7 +86,19 @@ namespace SqlSugar private void ExistLogic(EntityInfo entityInfo) { - throw new NotImplementedException(); + if (entityInfo.Columns.IsValuable()) + { + var tableName = GetTableName(entityInfo); + var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); + var errorColumns = 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(); + + foreach (var item in addColumns) + { + this.Context.DbMaintenance.AddColumnToTable(tableName,EntityColumnToDbColumn(entityInfo,tableName,item)); + } + } + // this.Context.DbMaintenance.CreateTable(tableName, columns); } public string GetCreateTableString(EntityInfo entityInfo) @@ -138,6 +120,23 @@ namespace SqlSugar { return entityInfo.DbTableName == null ? entityInfo.EntityName : entityInfo.DbTableName; } + private DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item) + { + return new DbColumnInfo() + { + Length = item.Length, + DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name), + TableId = entityInfo.Columns.IndexOf(item), + DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, + IsPrimarykey = item.IsPrimarykey, + IsIdentity = item.IsIdentity, + TableName = tableName, + IsNullable = item.IsNullable, + DefaultValue = item.DefaultValue, + ColumnDescription = item.ColumnDescription + }; + } + #endregion } } diff --git a/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 3d74d3952..25cca2f4e 100644 --- a/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -92,22 +92,35 @@ namespace SqlSugar { string columnName = item.DbColumnName; string dataType = item.DataType; - string dataSize = item.Length > 0 ? string.Format("({0})",item.Length) : null; + string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null; string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull; - string primaryKey =item.IsPrimarykey? this.CreateTablePirmaryKey:null; - string identity = item.IsIdentity? this.CreateTableIdentity:null; - string addItem= string.Format(this.CreateTableColumn, columnName, dataType, dataSize, nullType, primaryKey,identity); + string primaryKey = item.IsPrimarykey ? this.CreateTablePirmaryKey : null; + string identity = item.IsIdentity ? this.CreateTableIdentity : null; + string addItem = string.Format(this.CreateTableColumn, columnName, dataType, dataSize, nullType, primaryKey, identity); columnArray.Add(addItem); } - string tableString = string.Format(this.CreateTableSql,tableName, string.Join(",\r\n", columnArray)); + string tableString = string.Format(this.CreateTableSql, tableName, string.Join(",\r\n", columnArray)); return tableString; } + public virtual string GetAddColumnSql(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.AddColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity); + return result; + } #endregion #region DDL public bool AddColumnToTable(string tableName, DbColumnInfo columnName) { - throw new NotImplementedException(); + string sql = GetAddColumnSql(tableName, columnName); + this.Context.Ado.ExecuteCommand(sql); + return true; } public virtual bool CreateTable(string tableName, List columns) @@ -116,8 +129,9 @@ namespace SqlSugar this.Context.Ado.ExecuteCommand(sql); return true; } - public bool DropTable(string tableName) { - this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql,tableName)); + public bool DropTable(string tableName) + { + this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql, tableName)); return true; } public virtual bool TruncateTable(string tableName) @@ -128,8 +142,9 @@ namespace SqlSugar public bool BackupDataBase(string databaseName, string fullFileName) { - var directory=FileHelper.GetDirectoryFromFilePath(fullFileName); - if (!FileHelper.IsExistDirectory(directory)) { + var directory = FileHelper.GetDirectoryFromFilePath(fullFileName); + if (!FileHelper.IsExistDirectory(directory)) + { FileHelper.CreateDirectory(directory); } this.Context.Ado.ExecuteCommand(string.Format(this.BackupDataBaseSql, databaseName, fullFileName)); diff --git a/SqlSugar/Interface/ICodeFirst.cs b/SqlSugar/Interface/ICodeFirst.cs index 94b2d1e89..e92adaf2d 100644 --- a/SqlSugar/Interface/ICodeFirst.cs +++ b/SqlSugar/Interface/ICodeFirst.cs @@ -7,9 +7,6 @@ namespace SqlSugar public partial interface ICodeFirst { SqlSugarClient Context { get; set; } - ICodeFirst IsBackupTable(bool isBackupTable = true); - ICodeFirst IsBackupData(bool isBackupData = true); - ICodeFirst IsDeleteNoExistColumn(bool isDeleteNoExistColumn = true); void InitTables(string entitiesNamespace); void InitTables(string [] entitiesNamespaces); void InitTables(Type [] entityTypes); diff --git a/SqlSugar/Interface/IDbMaintenance.cs b/SqlSugar/Interface/IDbMaintenance.cs index e8a440da2..97d13418c 100644 --- a/SqlSugar/Interface/IDbMaintenance.cs +++ b/SqlSugar/Interface/IDbMaintenance.cs @@ -29,6 +29,7 @@ namespace SqlSugar #region Get Sql string GetCreateTableSql(string tableName, List columns); + string GetAddColumnSql(string tableName, DbColumnInfo columnName); #endregion #region DDL diff --git a/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs b/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs index ff718257c..c55e2ba6a 100644 --- a/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs +++ b/SqlSugar/Realization/SqlServer/DbMaintenance/SqlServerDbMaintenance.cs @@ -79,7 +79,7 @@ namespace SqlSugar { get { - return "ALERT TABLE {0} ADD {1} {2} {3}"; + return "ALERT TABLE {0} ADD {1} {2}{3} {4} {5} {6}"; } } protected override string AlterColumnToTableSql