mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-16 16:50:41 +08:00
Code First
This commit is contained in:
parent
d12c8fed02
commit
32e0b6f7cc
@ -8,9 +8,8 @@ namespace OrmTest.Demo
|
||||
{
|
||||
public class CodeTable
|
||||
{
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
[SugarColumn(Length = 100)]
|
||||
[SugarColumn(Length = 2)]
|
||||
public string Name { get; set; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public bool IsOk { get; set; }
|
||||
@ -22,6 +21,10 @@ namespace OrmTest.Demo
|
||||
public double? Dob { get; set; }
|
||||
public string A { get; set; }
|
||||
}
|
||||
public class CodeTable2 {
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
public class CodeFirst : DemoBase
|
||||
{
|
||||
public static void Init()
|
||||
@ -31,12 +34,14 @@ namespace OrmTest.Demo
|
||||
ConnectionString = Config.ConnectionString,
|
||||
DbType = DbType.SqlServer,
|
||||
IsAutoCloseConnection = true,
|
||||
InitKeyType = InitKeyType.Attribute
|
||||
InitKeyType = InitKeyType.Attribute
|
||||
});
|
||||
//if (db.DbMaintenance.IsAnyTable("CodeTable"))
|
||||
// db.DbMaintenance.DropTable("CodeTable");
|
||||
//db.DbMaintenance.BackupDataBase("SqlSugar4XTest","c:\\back\\1.bak");
|
||||
db.CodeFirst.InitTables(typeof(CodeTable));
|
||||
|
||||
//Backup table
|
||||
db.CodeFirst.BackupTable().InitTables(typeof(CodeTable),typeof(CodeTable2));
|
||||
|
||||
//No backup table
|
||||
//db.CodeFirst.InitTables(typeof(CodeTable),typeof(CodeTable2));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,11 +9,20 @@ namespace SqlSugar
|
||||
{
|
||||
#region Properties
|
||||
public virtual SqlSugarClient Context { get; set; }
|
||||
private bool IsBackupTable { get; set; }
|
||||
private int MaxBackupDataRows { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
public ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue)
|
||||
{
|
||||
this.IsBackupTable = true;
|
||||
this.MaxBackupDataRows = maxBackupDataRows;
|
||||
return this;
|
||||
}
|
||||
public void InitTables(Type entityType)
|
||||
{
|
||||
Check.Exception(this.Context.IsSystemTablesConfig, "Please set SqlSugarClent Parameter ConnectionConfig.InitKeyType=InitKeyType.Attribute ");
|
||||
var executeResult = Context.Ado.UseTran(() =>
|
||||
{
|
||||
Execute(entityType);
|
||||
@ -35,7 +44,7 @@ namespace SqlSugar
|
||||
var types = Assembly.Load(entitiesNamespace).GetTypes();
|
||||
InitTables(types);
|
||||
}
|
||||
public void InitTables(string[] entitiesNamespaces)
|
||||
public void InitTables(params string[] entitiesNamespaces)
|
||||
{
|
||||
if (entitiesNamespaces.IsValuable())
|
||||
{
|
||||
@ -79,26 +88,36 @@ namespace SqlSugar
|
||||
var tableName = GetTableName(entityInfo);
|
||||
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 addColumns = entityInfo.Columns.Where(entityColumn => !dbColumns.Any(dbColumn => entityColumn.DbColumnName.Equals(dbColumn.DbColumnName))).ToList();
|
||||
var alterColumns = dbColumns.Where(dbColumn => entityInfo.Columns
|
||||
.Any(entityCoulmn =>
|
||||
.Any(entityCoulmn =>
|
||||
dbColumn.DbColumnName.Equals(entityCoulmn.DbColumnName)
|
||||
&&((entityCoulmn.Length!=dbColumn.Length&&PubMethod.GetUnderType(entityCoulmn.PropertyInfo).IsIn(PubConst.StringType))||entityCoulmn.IsNullable!=dbColumn.IsNullable)
|
||||
&& ((entityCoulmn.Length != dbColumn.Length && PubMethod.GetUnderType(entityCoulmn.PropertyInfo).IsIn(PubConst.StringType)) || entityCoulmn.IsNullable != dbColumn.IsNullable)
|
||||
)).ToList();
|
||||
var isChange = false;
|
||||
foreach (var item in addColumns)
|
||||
{
|
||||
this.Context.DbMaintenance.AddColumn(tableName,EntityColumnToDbColumn(entityInfo,tableName,item));
|
||||
this.Context.DbMaintenance.AddColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item));
|
||||
isChange = true;
|
||||
}
|
||||
foreach (var item in droupColumns)
|
||||
{
|
||||
this.Context.DbMaintenance.DropColumn(tableName,item.DbColumnName);
|
||||
this.Context.DbMaintenance.DropColumn(tableName, item.DbColumnName);
|
||||
isChange = true;
|
||||
}
|
||||
foreach (var item in alterColumns)
|
||||
{
|
||||
var newitem = this.Context.RewritableMethods.TranslateCopy(item);
|
||||
newitem.IsPrimarykey = false;
|
||||
newitem.IsIdentity = false;
|
||||
if (newitem.Length > 0)
|
||||
newitem.Length = newitem.Length / 2;
|
||||
this.Context.DbMaintenance.UpdateColumn(tableName, newitem);
|
||||
isChange = true;
|
||||
}
|
||||
if (isChange && IsBackupTable)
|
||||
{
|
||||
this.Context.DbMaintenance.BackupTable(tableName, tableName + DateTime.Now.ToString("yyyyMMddHHmmss"),MaxBackupDataRows);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -124,9 +143,8 @@ namespace SqlSugar
|
||||
}
|
||||
private DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
return new DbColumnInfo()
|
||||
var result= 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,
|
||||
@ -137,6 +155,7 @@ namespace SqlSugar
|
||||
DefaultValue = item.DefaultValue,
|
||||
ColumnDescription = item.ColumnDescription
|
||||
};
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -7,9 +7,10 @@ namespace SqlSugar
|
||||
public partial interface ICodeFirst
|
||||
{
|
||||
SqlSugarClient Context { get; set; }
|
||||
ICodeFirst BackupTable(int maxBackupDataRows=int.MaxValue);
|
||||
void InitTables(string entitiesNamespace);
|
||||
void InitTables(string [] entitiesNamespaces);
|
||||
void InitTables(Type [] entityTypes);
|
||||
void InitTables(params Type [] entityTypes);
|
||||
void InitTables(Type entityType);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user