Beispiel #1
0
 public int SaveDatabase(DatabaseDTO message)
 {
     using (var projectContext = new DataAccess.MyProjectEntities())
     {
         var dbDatabase = projectContext.DatabaseInformation.FirstOrDefault(x => x.ID == message.ID);
         if (dbDatabase == null)
         {
             dbDatabase = new DatabaseInformation();
             dbDatabase.SecurityObject      = new SecurityObject();
             dbDatabase.SecurityObject.Type = (int)DatabaseObjectCategory.Database;
         }
         dbDatabase.DBServerID       = message.DBServerID;
         dbDatabase.Name             = message.Name;
         dbDatabase.Title            = message.Title;
         dbDatabase.DBHasDate        = message.DBHasData;
         dbDatabase.ConnectionString = message.ConnectionString;
         dbDatabase.DBType           = message.DBType.ToString();
         if (dbDatabase.ID == 0)
         {
             projectContext.DatabaseInformation.Add(dbDatabase);
         }
         projectContext.SaveChanges();
         return(dbDatabase.ID);
     }
 }
Beispiel #2
0
        private async void SetImportedInfo()
        {
            try
            {
                if (FormIsBusy != null)
                {
                    FormIsBusy(this, null);
                }
                DatabaseDTO database = null;
                if (Database == null)
                {
                    if (lokDatabase.SelectedItem != null)
                    {
                        database = (DatabaseDTO)lokDatabase.SelectedItem;
                    }
                }
                else
                {
                    database = Database;
                }
                if (database != null)
                {
                    var dbObject = await GetDatabaseObjects(database);

                    if (dbObject.ChildObjects.Any())
                    {
                        AddDBObjectsToTree(new List <ObjectDTO>()
                        {
                            dbObject
                        }, treeDBObjects.Items);
                    }
                    else
                    {
                        treeDBObjects.Items.Clear();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("خطا در پردازش اطلاعات" + Environment.NewLine + ex.Message);
            }
            finally
            {
                if (treeDBObjects.Items.Count > 0 && (treeDBObjects.Items[0] as RadTreeViewItem).Items.Count > 0)
                {
                    if (FormIsFree != null)
                    {
                        FormIsFree(this, null);
                    }
                    lblMessage.Visibility = Visibility.Collapsed;
                }
                else
                {
                    treeDBObjects.Items.Clear();
                    lblMessage.Text       = "موجودیتی به منظور افزودن به درخت منو موجود نمی باشد";
                    lblMessage.Visibility = Visibility.Visible;
                }
            }
        }
        public frmTableProperty_Relation(DatabaseDTO database)
        {
            InitializeComponent();
            Database = database;
            dtgRelationship.RowLoaded += DtgNewTables_RowLoaded;

            //if (!Database.DBHasData)
            //    colSearchInitially.IsVisible = false;
        }
        public frmTableUIComposition(DatabaseDTO database)
        {
            InitializeComponent();
            Database = database;
            dtgNewTables.RowLoaded += DtgNewTables_RowLoaded;

            //dtgNewTables.CellEditEnded += DtgNewTables_CellEditEnded;
            //if (!Database.DBHasData)
            //    colIsDataReference.IsVisible = false;
        }
        //   LinkedList<ImportWizardStep> WizardSteps = new LinkedList<ImportWizardStep>();
        public DatabaseImportWizard(int databaseID)
        {
            InitializeComponent();
            ucSteps.StepClicked += UcSteps_StepClicked;
            Database = bizDatabase.GetDatabase(databaseID);

            SetWizardSteps();


        }
Beispiel #6
0
 public Task <ObjectDTO> GetDatabaseObjects(DatabaseDTO database)
 {
     return(Task.Run(() =>
     {
         ObjectDTO dbObject = new ObjectDTO();
         dbObject.ObjectCategory = DatabaseObjectCategory.Database;
         dbObject.ObjectIdentity = database.ID;
         dbObject.Title = database.Name;
         AddChildObjects(dbObject);
         return dbObject;
     }));
 }
        public frmEntityIsDataReference(DatabaseDTO database)
        {
            InitializeComponent();
            Database             = database;
            dtgTables.RowLoaded += DtgNewTables_RowLoaded;
            //dtgNewTablesNonSuspicious.RowLoaded += DtgNewTables_RowLoaded;
            bizTableDrivedEntity.ItemImportingStarted += BizTableDrivedEntity_ItemImportingStarted;

            //dtgNewTables.CellEditEnded += DtgNewTables_CellEditEnded;
            //if (!Database.DBHasData)
            //    colIsDataReference.IsVisible = false;
            this.Loaded += FrmTableProperty_BaseTable_Loaded;
        }
Beispiel #8
0
        public List <RelationDTO> ImportRelations(DatabaseDTO database, Dictionary <string, Guid> entityIds, Dictionary <string, Guid> attributeIds, ref int lastTable)
        {
            var metadataProvider = new MetadataProvider();

            try
            {
                List <RelationDTO> relations = metadataProvider.LoadRelations(database, entityIds, attributeIds, ref lastTable);
                return(relations);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("Metadata provider error", ex);
            }
        }
 public frmDatabaseSetting(int databaseID)
 {
     InitializeComponent();
     Message         = bizDatabase.GetDatabase(databaseID);
     txtDBName.Text  = Message.Name;
     txtDBTitle.Text = Message.Title;
     if (Message.DatabaseSetting == null)
     {
         Message.DatabaseSetting = new DatabaseSettingDTO();
     }
     chkFlowDirectionLTR.IsChecked         = Message.DatabaseSetting.FlowDirectionLTR;
     chkShowMiladiDateInUI.IsChecked       = Message.DatabaseSetting.ShowMiladiDateInUI;
     chkStringDateColumnIsMiladi.IsChecked = Message.DatabaseSetting.StringDateColumnIsMiladi;
 }
 public frmImportTables(DatabaseDTO database)
 {
     InitializeComponent();
     Database     = database;
     ImportHelper = ModelGenerator.GetDatabaseImportHelper(Database);
     ImportHelper.ItemImportingStarted         += ImportHelper_ItemImportingStarted;
     bizTableDrivedEntity.ItemImportingStarted += ImportHelper_ItemImportingStarted;
     dtgNewTables.RowLoaded       += DtgNewTables_RowLoaded;
     dtgEditTables.RowLoaded      += Dtg_RowLoaded;
     dtgExistingTables.RowLoaded  += Dtg_RowLoaded;
     dtgDeletedTables.RowLoaded   += Dtg_RowLoaded;
     dtgExceptionTables.RowLoaded += Dtg_RowLoaded;
     this.Loaded += FrmImportTables_Loaded;
     // colDataCountLimit.Header = "تعداد داده کمتر از" + " " + DataCountLimit + " " + "مورد است";
 }
        public frmImportViews(DatabaseDTO database)
        {
            InitializeComponent();
            Database     = database;
            ImportHelper = ModelGenerator.GetDatabaseImportHelper(Database);
            ImportHelper.ItemImportingStarted         += ImportHelper_ItemImportingStarted;
            bizTableDrivedEntity.ItemImportingStarted += ImportHelper_ItemImportingStarted;
            dtgNewViews.RowLoaded       += DtgNewViews_RowLoaded;
            dtgEditViews.RowLoaded      += DtgNewViews_RowLoaded;
            dtgExistingViews.RowLoaded  += DtgNewViews_RowLoaded;
            dtgDeletedViews.RowLoaded   += DtgNewViews_RowLoaded;
            dtgExceptionViews.RowLoaded += DtgNewViews_RowLoaded;

            this.Loaded += FrmImportViews_Loaded;
        }
Beispiel #12
0
        public List <EntityDTO> ImportObjects(DatabaseDTO database, ref int lastTable)
        {
            var metadataProvider = new MetadataProvider();

            try
            {
                List <EntityDTO> entities = metadataProvider.LoadEntities(database, ref lastTable);
                entities.ForEach(e => e.DatabaseID = database.ID);
                return(entities);
            }
            catch (Exception ex)
            {
                throw new InvalidOperationException("Metadata provider error", ex);
            }
        }
        public frmImportFunctions(DatabaseDTO database)
        {
            InitializeComponent();
            Database     = database;
            ImportHelper = ModelGenerator.GetDatabaseImportHelper(Database);
            ImportHelper.ItemImportingStarted        += ImportHelper_ItemImportingStarted;
            bizDatabaseFunction.ItemImportingStarted += ImportHelper_ItemImportingStarted;
            dtgNewFunctions.RowLoaded       += DtgNewFunctions_RowLoaded;
            dtgEditFunctions.RowLoaded      += DtgNewFunctions_RowLoaded;
            dtgExistingFunctions.RowLoaded  += DtgNewFunctions_RowLoaded;
            dtgDeletedFunctions.RowLoaded   += DtgNewFunctions_RowLoaded;
            dtgExceptionFunctions.RowLoaded += DtgNewFunctions_RowLoaded;

            this.Loaded += FrmImportFunctions_Loaded;
        }
Beispiel #14
0
        private List <DarwinValidation.ValidationError> DoImport(DatabaseDTO database)
        {
            var entityIds    = new Dictionary <string, Guid>();
            var attributeIds = new Dictionary <string, Guid>();

            var services   = new SqlServerServices();
            var dataSource = new ObjectDataSource();
            var entities   = new List <EntityDTO>();
            int lastTable  = 0;

            var errors    = new List <DarwinValidation.ValidationError>();
            var validator = new Validator();

            do
            {
                entities = services.ImportObjects(database, ref lastTable);
                dataSource.SaveObject(database);
                foreach (var entity in entities)
                {
                    var validationError = validator.Validate(entity);
                    if (validationError != null)
                    {
                        errors.Add(validationError);
                    }

                    dataSource.SaveObject(entity, bypassValidation: true);
                    entityIds.Add(entity.EntitySchemaPrefixedName, entity.ID);
                    foreach (var attribute in entity.Attributes)
                    {
                        attributeIds.Add(entity.EntitySchemaPrefixedName + "." + attribute.AttributeName, attribute.ID);
                    }
                }
            } while (entities.Count > 0);

            List <RelationDTO> relations = new List <RelationDTO>();

            lastTable = 0;
            do
            {
                relations = services.ImportRelations(database, entityIds, attributeIds, ref lastTable);
                foreach (var relation in relations)
                {
                    dataSource.SaveObject(relation);
                }
            } while (relations.Count > 0);

            return(errors);
        }
        public frmTableFinalSettings(DatabaseDTO database)
        {
            InitializeComponent();

            var frmTableUIComposition = new frmTableUIComposition(database);

            grdMain.Children.Add(frmTableUIComposition);
            Grid.SetColumn(frmTableUIComposition, 1);

            var frmViews = new frmTableDefaultListView(database);

            grdMain.Children.Add(frmViews);

            frmTableUIComposition.InfoUpdated += FrmViews_InfoUpdated;
            frmViews.InfoUpdated += FrmViews_InfoUpdated;
        }
 public frmDatabase(int databaseID)
 {
     InitializeComponent();
     cmbType.ItemsSource = Enum.GetValues(typeof(enum_DBType)).Cast <object>();
     SetServerLookup();
     if (databaseID == 0)
     {
         Message = new DatabaseDTO();
         CheckConnectionStringButton();
         btnSetting.Visibility = Visibility.Collapsed;
     }
     else
     {
         GetDatabase(databaseID);
     }
 }
Beispiel #17
0
        public frmImportRelationships(DatabaseDTO database)
        {
            InitializeComponent();
            Database     = database;
            ImportHelper = ModelGenerator.GetDatabaseImportHelper(Database);
            ImportHelper.ItemImportingStarted         += ImportHelper_ItemImportingStarted;
            bizTableDrivedEntity.ItemImportingStarted += ImportHelper_ItemImportingStarted;
            bizRelationship.ItemImportingStarted      += ImportHelper_ItemImportingStarted;
            dtgNewRelationships.RowLoaded             += DtgNewRelationships_RowLoaded;
            dtgExistingRelationships.RowLoaded        += DtgNewRelationships_RowLoaded;
            dtgDeletedRelationships.RowLoaded         += DtgNewRelationships_RowLoaded;
            dtgExceptionRelationships.RowLoaded       += DtgNewRelationships_RowLoaded;

            colRelationshipType.ItemsSource    = Enum.GetValues(typeof(Enum_OrginalRelationshipType)).Cast <Enum_OrginalRelationshipType>();
            dtgNewRelationships.CellEditEnded += DtgNewRelationships_CellEditEnded;
            this.Loaded += FrmImportRelationships_Loaded;
        }
        public frmImportViewsAndFunctions(DatabaseDTO database)
        {
            InitializeComponent();

            var frmFunctions = new frmImportFunctions(database);

            grdMain.Children.Add(frmFunctions);
            Grid.SetColumn(frmFunctions, 2);

            var frmViews = new frmImportViews(database);

            grdMain.Children.Add(frmViews);

            frmFunctions.InfoUpdated += Frm_InfoUpdated;
            frmFunctions.FormIsBusy  += Frm_FormIsBusy;
            frmFunctions.FormIsFree  += Frm_FormIsFree;
            frmViews.InfoUpdated     += Frm_InfoUpdated;
            frmViews.FormIsBusy      += Frm_FormIsBusy;
            frmViews.FormIsFree      += Frm_FormIsFree;
        }
Beispiel #19
0
        private DatabaseDTO ToDatabaseDTO(DataAccess.DatabaseInformation item, bool withSetting = false)
        {
            DatabaseDTO result = new DatabaseDTO();

            result.ID               = item.ID;
            result.Name             = item.Name;
            result.Title            = item.Title;
            result.DBServerID       = item.DBServerID;
            result.DBServerName     = item.DBServer.Name;
            result.DBServerTitle    = item.DBServer.Title;
            result.DBType           = (enum_DBType)Enum.Parse(typeof(enum_DBType), item.DBType, true);
            result.DBHasData        = item.DBHasDate;
            result.ConnectionString = item.ConnectionString;
            if (withSetting)
            {
                result.DatabaseSetting = GetDatabaseSetting(item);
            }

            return(result);
        }
Beispiel #20
0
        //کلا بروزرسانی مدل باید تست بشه مرحله به مرحله در فرمهای موجودیت و روابط دیسیبل اینیبل و دیتااینتری اینیبل بشن و تست شود
        public frmEntityIsIndependent(DatabaseDTO database)
        {
            InitializeComponent();
            Database             = database;
            dtgTables.RowLoaded += DtgNewTables_RowLoaded;
            //    dtgNewTablesNonSuspicious.RowLoaded += DtgNewTables_RowLoaded;
            //dtgNewTables.CellEditEnded += DtgNewTables_CellEditEnded;
            if (!Database.DBHasData)
            {
                //colSearchInitiallySuspicious.IsVisible = false;
                //colSearchInitiallyNonSuspicious.IsVisible = false;
            }
            bizTableDrivedEntity.ItemImportingStarted += BizTableDrivedEntity_ItemImportingStarted;
            bizRelationship.ItemImportingStarted      += BizTableDrivedEntity_ItemImportingStarted;
            dtgTables.CellEditEnded += DtgRelationship_CellEditEnded;
            //      dtgNewTablesSuspicious.CellLoaded += DtgRelationship_CellLoaded;

            // dtgNewTablesNonSuspicious.CellEditEnded += DtgRelationship_CellEditEnded;
            this.Loaded += FrmTableProperty_BaseTable_Loaded;
            // dtgNewTablesNonSuspicious.CellLoaded += DtgRelationship_CellLoaded;
        }
        public frmEntitySettings(DatabaseDTO database)
        {
            InitializeComponent();
            Database = database;
            bizEntitySettings.ItemImportingStarted += BizEntityUIComposition_ItemImportingStarted;

            //bizEntityUIComposition.ItemImportingStarted += BizEntityUIComposition_ItemImportingStarted;
            //bizEntityListView.ItemImportingStarted += BizEntityUIComposition_ItemImportingStarted;
            //bizEntitySearch.ItemImportingStarted += BizEntityUIComposition_ItemImportingStarted;

            //    this.Loaded += FrmTableFinalSettings_Loaded;
            //var frmTableUIComposition = new frmTableUIComposition(database);
            //grdMain.Children.Add(frmTableUIComposition);
            //Grid.SetColumn(frmTableUIComposition, 1);

            //var frmViews = new frmTableDefaultListView(database);
            //grdMain.Children.Add(frmViews);

            //frmTableUIComposition.InfoUpdated += FrmViews_InfoUpdated;
            //frmViews.InfoUpdated += FrmViews_InfoUpdated;
            this.Loaded += FrmEntitySettings_Loaded;
        }
 private static DatabaseProvider GetDatabaseProvider(DatabaseDTO databaseDTO)
 {
     return(DatabaseProvider.SQLServer);
 }
Beispiel #23
0
 public frmNavigationTree(DatabaseDTO database, bool ignoreNotIndependentOrAlreadyInNavigationTree) : this()
 {
     Database = database;
     bizDatabaseToObject.IgnoreNotIndependentOrAlreadyInNavigationTree = ignoreNotIndependentOrAlreadyInNavigationTree;
     grdDatabase.Visibility = Visibility.Collapsed;
 }
 private static bool InsertFromQueryToTargetSQLDB(DatabaseDTO database, string targetTableName, string selectQuery)
 {
     //}
     //}
 }
Beispiel #25
0
 public static I_DatabaseImportHelper GetDatabaseImportHelper(DatabaseDTO database)
 {
     return(new ModelGenerator_sql(database));
 }
        //private void btnClose_Click(object sender, RoutedEventArgs e)
        //{
        //    MyProjectManager.GetMyProjectManager.CloseDialog(this);
        //}

        private void btnNew_Click(object sender, RoutedEventArgs e)
        {
            Message = new DatabaseDTO();
            ShowMessage();
        }
Beispiel #27
0
        public void ProcessCreateNewDatabase()
        {
            var projectID = new ProjectTreeHelper().GetCurrentProjectID();

            if (projectID == Guid.Empty)
            {
                throw new InvalidOperationException("No active project.");
            }

            // TODO: move to separate class dedicated to the object creation
            var newDatabase = new DatabaseDTO()
            {
                DBName = "<Enter name>", ProjectID = projectID
            };

            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Boolean"
            });

            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Int8"
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Int16"
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Int32"
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Int64"
            });

            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Real32"
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Real64"
            });

            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Char", HasLength = true
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "NChar", HasLength = true
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "VarChar", HasLength = true
            });
            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "NVarChar", HasLength = true
            });

            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "Guid"
            });

            newDatabase.DataTypes.Add(new DataTypeDTO()
            {
                DatabaseID = newDatabase.ID, TypeName = "DateTime"
            });

            var view = new DatabaseDetailsView();

            view.Object = newDatabase;

            var popup = new PopupWindow();

            popup.Title    = "New Database";
            popup.Validate = () => { return(new Validator().Validate(newDatabase)); };
            popup.ViewPanel.Children.Add(view);

            if (popup.ShowDialog() == true)
            {
                new ObjectDataSource().SaveObject(newDatabase);
                ServiceLocator serviceLocator = ServiceLocator.GetActive();
                serviceLocator.BasicController.ProcessProjectTreeRefresh();
            }
        }
Beispiel #28
0
        internal List <RelationDTO> LoadRelations(DatabaseDTO database, Dictionary <string, Guid> entityIds, Dictionary <string, Guid> attributeIds, ref int lastTable)
        {
            const int ExpectedColumnsTotal = 8;
            const int TablesPerCall        = 4;      // TODO: move to config

            var relations = new List <RelationDTO>();

            var commandText = SqlQueries.GetRelationsQuery;

            using (var connection = new SqlConnection(database.ConnectionString))
            {
                var command = connection.CreateCommand();
                command.CommandType = CommandType.Text;
                command.CommandText = commandText;

                var param1 = new SqlParameter();
                param1.ParameterName = "@TABLE_NUMBER";
                param1.SqlDbType     = SqlDbType.Int;
                param1.Direction     = ParameterDirection.Input;
                param1.Value         = lastTable;
                command.Parameters.Add(param1);

                var param2 = new SqlParameter();
                param2.ParameterName = "@TABLES_IN_ONE_CALL";
                param2.SqlDbType     = SqlDbType.Int;
                param2.Direction     = ParameterDirection.Input;
                param2.Value         = TablesPerCall;
                command.Parameters.Add(param2);

                connection.Open();
                var reader = command.ExecuteReader();
                {
                    if (reader.HasRows)
                    {
                        if (reader.FieldCount != ExpectedColumnsTotal)
                        {
                            throw new InvalidOperationException(String.Format("Query returned less or more than {0} columns ({1})", ExpectedColumnsTotal, commandText));
                        }

                        string      lastPrimaryTableName = string.Empty;
                        string      lastForeignTableName = string.Empty;
                        string      lastRelationName     = string.Empty;
                        RelationDTO relation             = null;

                        int relationsProcessed = 0;
                        while (reader.Read())
                        {
                            lastTable = Convert.ToInt32(reader["TABLE_NUMBER"]);

                            string primaryTableName = reader["PrimaryTableName"].ToString();
                            string foreignTableName = reader["ForeignTableName"].ToString();
                            string relationName     = reader["RelationName"].ToString();

                            // New relation
                            if (!primaryTableName.Equals(lastPrimaryTableName, StringComparison.InvariantCultureIgnoreCase) ||
                                !foreignTableName.Equals(lastForeignTableName, StringComparison.InvariantCultureIgnoreCase) ||
                                !relationName.Equals(lastRelationName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                relation = new RelationDTO()
                                {
                                    RelationName    = relationName,
                                    PrimaryEntityID = entityIds[primaryTableName],
                                    ForeignEntityID = entityIds[foreignTableName],
                                    OneToOne        = Convert.ToInt32(reader["IsUnique"]) == 1
                                };
                                relations.Add(relation);
                                relationsProcessed++;
                            }

                            string primaryColumnName = reader["PrimaryColumnName"].ToString();
                            string foreignColumnName = reader["ForeignColumnName"].ToString();

                            var relationItem = new RelationItemDTO()
                            {
                                RelationID         = relation.ID,
                                PrimaryAttributeID = attributeIds[primaryTableName + "." + primaryColumnName],
                                ForeignAttributeID = attributeIds[foreignTableName + "." + foreignColumnName]
                            };

                            relation.Items.Add(relationItem);

                            lastPrimaryTableName = primaryTableName;
                            lastForeignTableName = foreignTableName;
                            lastRelationName     = relationName;
                        }
                    }
                }
                reader.Close();
            }

            return(relations);
        }
Beispiel #29
0
        internal List <EntityDTO> LoadEntities(DatabaseDTO database, ref int lastTable)
        {
            const int ExpectedColumnsTotal = 9;
            const int TablesPerCall        = 4;

            // TODO: merge entities, attributes, not only data types

            var dataTypes = new Dictionary <string, DataTypeDTO>();
            var entities  = new List <EntityDTO>();

            foreach (var dataType in database.DataTypes)
            {
                dataTypes.Add(dataType.TypeName, dataType);
            }

            var commandText = SqlQueries.GetColumnsQuery;

            using (var connection = new SqlConnection(database.ConnectionString))
            {
                var command = connection.CreateCommand();
                command.CommandType = CommandType.Text;
                command.CommandText = commandText;

                var param1 = new SqlParameter();
                param1.ParameterName = "@TABLE_NUMBER";
                param1.SqlDbType     = SqlDbType.Int;
                param1.Direction     = ParameterDirection.Input;
                param1.Value         = lastTable;
                command.Parameters.Add(param1);

                var param2 = new SqlParameter();
                param2.ParameterName = "@TABLES_IN_ONE_CALL";
                param2.SqlDbType     = SqlDbType.Int;
                param2.Direction     = ParameterDirection.Input;
                param2.Value         = TablesPerCall;
                command.Parameters.Add(param2);

                connection.Open();
                var reader = command.ExecuteReader();
                {
                    if (reader.HasRows)
                    {
                        if (reader.FieldCount != ExpectedColumnsTotal)
                        {
                            throw new InvalidOperationException(String.Format("Query returned less or more than {0} columns ({1})", ExpectedColumnsTotal, commandText));
                        }

                        string    lastTableSchema = string.Empty;
                        string    lastTableName   = string.Empty;
                        EntityDTO entity          = null;

                        int tablesProcessed = 0;
                        while (reader.Read())
                        {
                            lastTable = Convert.ToInt32(reader["TABLE_NUMBER"]);

                            string tableSchema = reader["SchemaName"].ToString();
                            string tableName   = reader["TableName"].ToString();

                            // New table
                            if (!tableSchema.Equals(lastTableSchema, StringComparison.InvariantCultureIgnoreCase) ||
                                !tableName.Equals(lastTableName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                entity = new EntityDTO()
                                {
                                    DatabaseID = database.ID,
                                    SchemaName = tableSchema,
                                    EntityName = tableName
                                };
                                entities.Add(entity);
                                tablesProcessed++;
                            }

                            var attribute = new AttributeDTO()
                            {
                                EntityID      = entity.ID,
                                AttributeName = reader["ColumnName"].ToString(),
                                IsRequired    = Convert.ToInt32(reader["IsNullable"]) == 0 ? true : false,
                                IsPrimaryKey  = Convert.ToInt32(reader["IsPrimaryKey"]) == 0 ? false : true,
                            };

                            var attributeTypeName = reader["DataType"].ToString();
                            if (!dataTypes.ContainsKey(attributeTypeName))
                            {
                                var dataType = new DataTypeDTO()
                                {
                                    DatabaseID = database.ID,
                                    TypeName   = attributeTypeName
                                };
                                dataTypes.Add(attributeTypeName, dataType);
                                database.DataTypes.Add(dataType);
                            }
                            var attributeType = dataTypes[attributeTypeName];
                            attribute.DataTypeID = attributeType.ID;

                            entity.Attributes.Add(attribute);

                            lastTableSchema = tableSchema;
                            lastTableName   = tableName;
                        }
                    }
                }
                reader.Close();
            }

            return(entities);
        }