예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }