Update CodeFirst

This commit is contained in:
sunkaixuna
2021-10-23 13:30:24 +08:00
parent 89d4505a5a
commit f9d2bfb853
4 changed files with 40 additions and 29 deletions

View File

@@ -47,8 +47,8 @@ namespace SqlSugar
public virtual void InitTables(Type entityType) public virtual void InitTables(Type entityType)
{ {
this.Context.Utilities.RemoveCacheAll(); //this.Context.Utilities.RemoveCacheAll();
this.Context.InitMappingInfo(entityType); this.Context.InitMappingInfoNoCache(entityType);
if (!this.Context.DbMaintenance.IsAnySystemTablePermissions()) if (!this.Context.DbMaintenance.IsAnySystemTablePermissions())
{ {
Check.Exception(true, "Dbfirst and Codefirst requires system table permissions"); Check.Exception(true, "Dbfirst and Codefirst requires system table permissions");
@@ -114,7 +114,7 @@ namespace SqlSugar
#region Core Logic #region Core Logic
protected virtual void Execute(Type entityType) protected virtual void Execute(Type entityType)
{ {
var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(entityType); var entityInfo = this.Context.EntityMaintenance.GetEntityInfoNoCache(entityType);
if (this.DefultLength > 0) if (this.DefultLength > 0)
{ {
foreach (var item in entityInfo.Columns) foreach (var item in entityInfo.Columns)
@@ -139,7 +139,7 @@ namespace SqlSugar
this.Context.MappingTables.Add(entityInfo.EntityName,tableName); this.Context.MappingTables.Add(entityInfo.EntityName,tableName);
entityInfo.DbTableName = tableName; entityInfo.DbTableName = tableName;
entityInfo.Columns.ForEach(it => { it.DbTableName = tableName; }); entityInfo.Columns.ForEach(it => { it.DbTableName = tableName; });
var isAny = this.Context.DbMaintenance.IsAnyTable(tableName); var isAny = this.Context.DbMaintenance.IsAnyTable(tableName,false);
if (isAny&&entityInfo.IsDisabledUpdateAll) if (isAny&&entityInfo.IsDisabledUpdateAll)
{ {
return; return;
@@ -175,7 +175,7 @@ namespace SqlSugar
//Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Multiple primary keys do not support modifications"); //Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Multiple primary keys do not support modifications");
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);
var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName,false);
ConvertColumns(dbColumns); ConvertColumns(dbColumns);
var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList();
var dropColumns = dbColumns var dropColumns = dbColumns

View File

@@ -21,30 +21,37 @@ namespace SqlSugar
return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey,
() => () =>
{ {
EntityInfo result = new EntityInfo(); return GetEntityInfoNoCache(type);
var sugarAttributeInfo = type.GetTypeInfo().GetCustomAttributes(typeof(SugarTable), true).Where(it => it is SugarTable).SingleOrDefault();
if (sugarAttributeInfo.HasValue())
{
var sugarTable = (SugarTable)sugarAttributeInfo;
result.DbTableName = sugarTable.TableName;
result.TableDescription = sugarTable.TableDescription;
result.IsDisabledUpdateAll = sugarTable.IsDisabledUpdateAll;
result.IsDisabledDelete = sugarTable.IsDisabledDelete;
}
if (this.Context.Context.CurrentConnectionConfig.ConfigureExternalServices != null && this.Context.CurrentConnectionConfig.ConfigureExternalServices.EntityNameService != null) {
if (result.DbTableName == null)
{
result.DbTableName = type.Name;
}
this.Context.CurrentConnectionConfig.ConfigureExternalServices.EntityNameService(type,result);
}
result.Type = type;
result.EntityName = result.Type.Name;
result.Columns = new List<EntityColumnInfo>();
SetColumns(result);
return result;
}); });
} }
public EntityInfo GetEntityInfoNoCache(Type type)
{
EntityInfo result = new EntityInfo();
var sugarAttributeInfo = type.GetTypeInfo().GetCustomAttributes(typeof(SugarTable), true).Where(it => it is SugarTable).SingleOrDefault();
if (sugarAttributeInfo.HasValue())
{
var sugarTable = (SugarTable)sugarAttributeInfo;
result.DbTableName = sugarTable.TableName;
result.TableDescription = sugarTable.TableDescription;
result.IsDisabledUpdateAll = sugarTable.IsDisabledUpdateAll;
result.IsDisabledDelete = sugarTable.IsDisabledDelete;
}
if (this.Context.Context.CurrentConnectionConfig.ConfigureExternalServices != null && this.Context.CurrentConnectionConfig.ConfigureExternalServices.EntityNameService != null)
{
if (result.DbTableName == null)
{
result.DbTableName = type.Name;
}
this.Context.CurrentConnectionConfig.ConfigureExternalServices.EntityNameService(type, result);
}
result.Type = type;
result.EntityName = result.Type.Name;
result.Columns = new List<EntityColumnInfo>();
SetColumns(result);
return result;
}
public string GetTableName<T>() public string GetTableName<T>()
{ {
var typeName = typeof(T).Name; var typeName = typeof(T).Name;

View File

@@ -162,7 +162,11 @@ namespace SqlSugar
var copyObj = CopyEntityInfo(entityInfo); var copyObj = CopyEntityInfo(entityInfo);
InitMappingInfo(copyObj); InitMappingInfo(copyObj);
} }
public void InitMappingInfoNoCache(Type type)
{
var entityInfo = this.Context.EntityMaintenance.GetEntityInfoNoCache(type);
InitMappingInfo(entityInfo);
}
private EntityInfo CopyEntityInfo(EntityInfo entityInfo) private EntityInfo CopyEntityInfo(EntityInfo entityInfo)
{ {
EntityInfo result = new EntityInfo() EntityInfo result = new EntityInfo()

View File

@@ -14,7 +14,7 @@ namespace SqlSugar
Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1");
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);
var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName,false);
ConvertColumns(dbColumns); ConvertColumns(dbColumns);
var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList();
var dropColumns = dbColumns var dropColumns = dbColumns