public List <Table> GetSchema(List <Table> tables, TableSchemaProcessHandler reding)
 {
     try
     {
         return(GetDbSchema(tables, reding));
     }
     catch (Exception exp)
     {
         ErrorMessageBox.Show("获取数据架构时出错。", exp);
         return(null);
     }
 }
Beispiel #2
0
 public List <Table> GetSchema(List <Table> tables, TableSchemaProcessHandler processHandler)
 {
     try
     {
         return(InternalGetSchemas(tables, processHandler));
     }
     catch (Exception exp)
     {
         ErrorMessageBox.Show("获取数据架构时出错。", exp);
         return(null);
     }
 }
Beispiel #3
0
        private List <Table> GetDbSchema(IList <Table> tables, TableSchemaProcessHandler processHandler)
        {
            var result   = new List <Table>();
            var provider = ProviderHelper.GetDefinedProviderInstance(con.Type);

            using (var db = new Fireasy.Data.Database(con.ConnectionString, provider))
            {
                var providerName = db.Provider.GetType().Name;
                var schema       = db.Provider.GetService <Schema.ISchemaProvider>();
                var foreignKeys  = schema.GetSchemas <Schema.ForeignKey>(db).ToList();
                var dbTypes      = schema.GetSchemas <Schema.DataType>(db).ToList();
                var tableCount   = tables.Count;
                var index        = 0;

                var calc = new Func <int, int>(i =>
                {
                    return((int)((i / (tableCount * 1.0)) * 100));
                });

                var host = new Host();

                foreach (var t in tables)
                {
                    if (Processor.IsCancellationRequested())
                    {
                        return(null);
                    }

                    if (processHandler != null)
                    {
                        processHandler.Invoke(t.Name, calc(++index));
                    }

                    if (t.IsView)
                    {
                        var columns = schema.GetSchemas <Schema.ViewColumn>(db, s => s.ViewName == t.Name);
                        t.Columns.AddRange(ConvertSchemaViewColumns(t, columns, dbTypes, providerName));
                        result.Add(t);
                    }
                    else
                    {
                        var columns = schema.GetSchemas <Schema.Column>(db, s => s.TableName == t.Name);
                        t.Columns.AddRange(ConvertSchemaColumns(t, columns, dbTypes, providerName));
                        result.Add(t);
                    }
                    host.Attach(t);
                }

                ProcessForeignKeys(result, foreignKeys);
            }

            return(result);
        }
Beispiel #4
0
        private List <Table> InternalGetSchemas(List <Table> tables, TableSchemaProcessHandler processHandler)
        {
            var result     = new List <Table>();
            var parser     = new PdmParser(pdmFileName);
            var tableCount = tables.Count;
            var index      = 0;

            var calc = new Func <int, int>(i =>
            {
                return((int)((i / (tableCount * 1.0)) * 100));
            });

            var host = new Host();

            foreach (PdmTable t in tables)
            {
                if (Processor.IsCancellationRequested())
                {
                    return(null);
                }

                if (processHandler != null)
                {
                    processHandler(t.Name, calc(++index));
                }

                var table = parser.ParseTable(t);
                if (table == null)
                {
                    continue;
                }

                result.Add(table);
                host.Attach(table);
            }

            parser.ParseReferences(tables, result);

            return(result);
        }