public async void CreateTableObject(TableModel table) { if (!table.IsNewTable && (table.Columns == null || table.Columns.Count() == 0)) { await Task.Factory.StartNew(() => { ReverseEngineer reverseEngineer = new ReverseEngineer(this.Dispatcher); EventParser.ParseMessage(this, this.Dispatcher, string.Empty, "Reading table information."); table.Columns = table.Columns.AddRange(reverseEngineer.GetTableColumns(table.TableName).ToArray()); table.PrimaryKeyClusterConstraintName = reverseEngineer.GetTablePrimaryKeyCluster(table.TableName); }); } table.IsNewTable = false; table.IsDeleted = false; Integrity.MapTable(table); TableObject tableControl = new TableObject(table); tableControl.TableMove += this.TableObject_Move; tableControl.RemoveTable += this.TableObject_Remove; tableControl.ForeignKeyColumnAdded += this.TableObject_ForeignKeyAdded; foreach (KeyValuePair <string, DatabaseRelation> relation in tableControl.ColumnRelationModel) { relation.Value.DatabaseRelationDelete += this.DatabaseRelation_Delete; this.columnRelationModel.Add(relation.Key, relation.Value); } this.Children.Add(tableControl); this.ResizeCanvas(tableControl.Location, tableControl.ActualHeight, tableControl.ActualWidth); if (this.IsLoaded) { tableControl.InvalidateVisual(); this.AddRelationsDrawing(tableControl); } tableControl.TableColumnChanged += this.TableColumn_Changed; tableControl.TableHeaderChanged += this.TableHeader_Changed; }