protected void SyncStructure(params TypeAndName[] objects) { if (objects == null) { return; } var syncObjects = objects.Where(a => a.entityType != null && a.entityType != typeof(object) && _dicSycedGetOrAdd(a.entityType).ContainsKey(GetTableNameLowerOrUpper(a.tableName)) == false && GetTableByEntity(a.entityType)?.DisableSyncStructure == false) .Select(a => new TypeAndName(a.entityType, GetTableNameLowerOrUpper(a.tableName))) .Where(a => !(string.IsNullOrEmpty(a.tableName) == true && GetTableByEntity(a.entityType)?.AsTableImpl != null)) .ToArray(); if (syncObjects.Any() == false) { return; } var before = new Aop.SyncStructureBeforeEventArgs(syncObjects.Select(a => a.entityType).ToArray()); _orm.Aop.SyncStructureBeforeHandler?.Invoke(this, before); Exception exception = null; string ddl = null; try { lock (syncStructureLock) { ddl = this.GetComparisonDDLStatements(syncObjects); if (string.IsNullOrEmpty(ddl)) { foreach (var syncObject in syncObjects) { _dicSycedTryAdd(syncObject.entityType, syncObject.tableName); } return; } var affrows = ExecuteDDLStatements(ddl); foreach (var syncObject in syncObjects) { _dicSycedTryAdd(syncObject.entityType, syncObject.tableName); } return; } } catch (Exception ex) { exception = ex; throw; } finally { var after = new Aop.SyncStructureAfterEventArgs(before, ddl, exception); _orm.Aop.SyncStructureAfterHandler?.Invoke(this, after); } }
public bool SyncStructure(params Type[] entityTypes) { if (entityTypes == null) { return(false); } var syncTypes = entityTypes.Where(a => dicSyced.ContainsKey(a.FullName) == false && GetTableByEntity(a)?.DisableSyncStructure == false).ToArray(); if (syncTypes.Any() == false) { return(false); } var before = new Aop.SyncStructureBeforeEventArgs(entityTypes); _orm.Aop.SyncStructureBefore?.Invoke(this, before); Exception exception = null; string ddl = null; try { lock (syncStructureLock) { ddl = this.GetComparisonDDLStatements(syncTypes); if (string.IsNullOrEmpty(ddl)) { foreach (var syncType in syncTypes) { dicSyced.TryAdd(syncType.FullName, true); } return(true); } var affrows = _orm.Ado.ExecuteNonQuery(CommandType.Text, ddl); foreach (var syncType in syncTypes) { dicSyced.TryAdd(syncType.FullName, true); } return(affrows > 0); } } catch (Exception ex) { exception = ex; throw ex; } finally { var after = new Aop.SyncStructureAfterEventArgs(before, ddl, exception); _orm.Aop.SyncStructureAfter?.Invoke(this, after); } }