The db model view.
Inheritance: MiniSqlQuery.Core.DbModel.DbModelTable
        public override DbModelInstance GetDbObjectModel(string connection)
        {
            //_connection = connection;

            DbModelInstance   model   = new DbModelInstance();
            DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

            using (DbConnection dbConn = factory.CreateConnection())
            {
                dbConn.ConnectionString = connection;
                dbConn.Open();

                DataTable tables = dbConn.GetSchema("Tables");
                Dictionary <string, DbModelType> dbTypes = GetDbTypes(dbConn);
                model.Types            = dbTypes;
                model.ProviderName     = ProviderName;
                model.ConnectionString = connection;

                if (tables == null)
                {
                    return(model);
                }

                DataView tablesDV = new DataView(tables, "", "OWNER, TABLE_NAME", DataViewRowState.CurrentRows);

                foreach (DataRowView row in tablesDV)
                {
                    string schemaName = SafeGetString(row.Row, "OWNER");
                    string tableName  = SafeGetString(row.Row, "TABLE_NAME");

                    DbModelTable dbTable = new DbModelTable {
                        Schema = schemaName, Name = tableName
                    };
                    model.Add(dbTable);

                    DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
                    GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
                }

                DataTable views   = dbConn.GetSchema("Views");
                DataView  viewsDV = new DataView(views, "", "OWNER, VIEW_NAME", DataViewRowState.CurrentRows);
                foreach (DataRowView row in viewsDV)
                {
                    string schemaName = SafeGetString(row.Row, "OWNER");
                    string tableName  = SafeGetString(row.Row, "VIEW_NAME");

                    DbModelView dbTable = new DbModelView {
                        Schema = schemaName, Name = tableName
                    };
                    model.Add(dbTable);

                    DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
                    GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
                }

                // build FK relationships
                if (model.Tables != null)
                {
                    foreach (DbModelTable table in model.Tables)
                    {
                        GetForeignKeyReferencesForTable(dbConn, table);
                        ProcessForeignKeyReferencesForTable(dbConn, table);
                    }
                }

                // build FK relationships
                if (model.Views != null)
                {
                    foreach (DbModelView view in model.Views)
                    {
                        GetForeignKeyReferencesForTable(dbConn, view);
                        ProcessForeignKeyReferencesForTable(dbConn, view);
                    }
                }
            }

            return(model);
        }
 /// <summary>The add.</summary>
 /// <param name="view">The view.</param>
 public virtual void Add(DbModelView view)
 {
     view.ParentDb = this;
     _views.Add(view);
 }
        /// <summary>Gets a database object model that represents the items defined by the <paramref name="connection"/>.</summary>
        /// <param name="connection">The connection string.</param>
        /// <returns>An instance of <see cref="DbModelInstance"/> describing the database.</returns>
        public virtual DbModelInstance GetDbObjectModel(string connection)
        {
            _connection = connection;

            DbModelInstance model = new DbModelInstance();
            DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

            using (DbConnection dbConn = factory.CreateConnection())
            {
                dbConn.ConnectionString = connection;
                dbConn.Open();

                DataTable tables = dbConn.GetSchema("Tables");
                Dictionary<string, DbModelType> dbTypes = GetDbTypes(dbConn);
                model.Types = dbTypes;
                model.ProviderName = ProviderName;
                model.ConnectionString = _connection;

                DataView tablesDV = new DataView(tables, "TABLE_TYPE='TABLE' OR TABLE_TYPE='BASE TABLE'", "TABLE_SCHEMA, TABLE_NAME", DataViewRowState.CurrentRows);

                foreach (DataRowView row in tablesDV)
                {
                    string schemaName = SafeGetString(row.Row, "TABLE_SCHEMA");
                    string tableName = SafeGetString(row.Row, "TABLE_NAME");

                    DbModelTable dbTable = new DbModelTable {Schema = schemaName, Name = tableName};
                    model.Add(dbTable);

                    DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
                    GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
                }

                DataView viewsDV = new DataView(tables, "TABLE_TYPE='VIEW'", "TABLE_SCHEMA, TABLE_NAME", DataViewRowState.CurrentRows);
                foreach (DataRowView row in viewsDV)
                {
                    string schemaName = SafeGetString(row.Row, "TABLE_SCHEMA");
                    string tableName = SafeGetString(row.Row, "TABLE_NAME");

                    DbModelView dbTable = new DbModelView {Schema = schemaName, Name = tableName};
                    model.Add(dbTable);

                    DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
                    GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
                }

                // build FK relationships
                foreach (DbModelTable table in model.Tables)
                {
                    GetForeignKeyReferencesForTable(dbConn, table);
                    ProcessForeignKeyReferencesForTable(dbConn, table);
                }

                // build FK relationships
                foreach (DbModelView view in model.Views)
                {
                    GetForeignKeyReferencesForTable(dbConn, view);
                    ProcessForeignKeyReferencesForTable(dbConn, view);
                }
            }

            return model;
        }
        /// <summary>Gets a database object model that represents the items defined by the <paramref name="connection"/>.</summary>
        /// <param name="connection">The connection string.</param>
        /// <returns>An instance of <see cref="DbModelInstance"/> describing the database.</returns>
        public virtual DbModelInstance GetDbObjectModel(string connection)
        {
            _connection = connection;

            DbModelInstance   model   = new DbModelInstance();
            DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

            try
            {
                using (DbConnection dbConn = factory.CreateConnection())
                {
                    dbConn.ConnectionString = connection;
                    dbConn.Open();

                    DataTable tables = dbConn.GetSchema("Tables");
                    Dictionary <string, DbModelType> dbTypes = GetDbTypes(dbConn);
                    model.Types            = dbTypes;
                    model.ProviderName     = ProviderName;
                    model.ConnectionString = _connection;

                    if (tables == null)
                    {
                        return(model);
                    }

                    DataView tablesDV = new DataView(tables, "TABLE_TYPE='TABLE' OR TABLE_TYPE='BASE TABLE'", "TABLE_SCHEMA, TABLE_NAME", DataViewRowState.CurrentRows);

                    foreach (DataRowView row in tablesDV)
                    {
                        string schemaName = SafeGetString(row.Row, "TABLE_SCHEMA");
                        string tableName  = SafeGetString(row.Row, "TABLE_NAME");

                        DbModelTable dbTable = new DbModelTable {
                            Schema = schemaName, Name = tableName
                        };
                        model.Add(dbTable);

                        DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
                        GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
                    }

                    DataView viewsDV = new DataView(tables, "TABLE_TYPE='VIEW'", "TABLE_SCHEMA, TABLE_NAME", DataViewRowState.CurrentRows);
                    foreach (DataRowView row in viewsDV)
                    {
                        string schemaName = SafeGetString(row.Row, "TABLE_SCHEMA");
                        string tableName  = SafeGetString(row.Row, "TABLE_NAME");

                        DbModelView dbTable = new DbModelView {
                            Schema = schemaName, Name = tableName
                        };
                        model.Add(dbTable);

                        DataTable schemaTableKeyInfo = GetTableKeyInfo(dbConn, schemaName, tableName);
                        GetColumnsForTable(dbTable, schemaTableKeyInfo, dbTypes);
                    }

                    // build FK relationships
                    if (model.Tables != null)
                    {
                        foreach (DbModelTable table in model.Tables)
                        {
                            GetForeignKeyReferencesForTable(dbConn, table);
                            ProcessForeignKeyReferencesForTable(dbConn, table);
                        }
                    }

                    // build FK relationships
                    if (model.Views != null)
                    {
                        foreach (DbModelView view in model.Views)
                        {
                            GetForeignKeyReferencesForTable(dbConn, view);
                            ProcessForeignKeyReferencesForTable(dbConn, view);
                        }
                    }
                }
            }
            catch (Exception)
            {
                // catch all for providers that are not implementing the schema info.
                return(model);
            }

            return(model);
        }
 /// <summary>The add.</summary>
 /// <param name="view">The view.</param>
 public virtual void Add(DbModelView view)
 {
     view.ParentDb = this;
     _views.Add(view);
 }