Exemplo n.º 1
0
        public PersistenceController()
        {
            schema = new CatalogSchema();
            engine = new SQLiteEngine();
            repo   = new Repository(schema, engine);

            mediaItemSingleton      = schema.GetAggregate <IMediaItem>("MediaItemSingleton");
            mediaSetWithAllChildren = schema.GetAggregate <IMediaSet>("MediaSetWithAllChildren");

            mappingRepo = new Telesophy.Alexandria.Model.Mapping.Repository();
        }
Exemplo n.º 2
0
        protected override CatalogSchema OnGetSchema(DbConnection connection)
        {
            var tables       = connection.GetSchema("Tables");
            var columns      = connection.GetSchema("AllColumns");
            var foreignKeys  = connection.GetSchema("ForeignKeys");
            var indexColumns = connection.GetSchema("IndexColumns");

            var tableRows = tables.Rows.Cast <DataRow>().ToArray();
            var catalog   = new CatalogSchema
            {
                ConnectionString      = connection.ConnectionString,
                Name                  = (string)tableRows.FirstOrDefault()?["TABLE_CATALOG"],
                AssemblyQualifiedName = typeof(SqlServerDataAccess).AssemblyQualifiedName
            };

            #region Create Tables
            foreach (DataRow column in columns.Rows)
            {
                var tableSchema           = (string)column["TABLE_SCHEMA"];
                var tableName             = (string)column["TABLE_NAME"];
                var columnName            = (string)column["COLUMN_NAME"];
                var ordinalPosition       = (int)column["ORDINAL_POSITION"];
                var isNullable            = (string)column["IS_NULLABLE"];
                var dataType              = (string)column["DATA_TYPE"];
                var maxCharsLength        = (int?)(column["CHARACTER_MAXIMUM_LENGTH"] != DBNull.Value ? column["CHARACTER_MAXIMUM_LENGTH"] : null);
                var maxBytesLength        = (int?)(column["CHARACTER_OCTET_LENGTH"] != DBNull.Value ? column["CHARACTER_OCTET_LENGTH"] : null);
                var numericPrecision      = (byte?)(column["NUMERIC_PRECISION"] != DBNull.Value ? column["NUMERIC_PRECISION"] : null);
                var numericPrecisionRadix = (short?)(column["NUMERIC_PRECISION_RADIX"] != DBNull.Value ? column["NUMERIC_PRECISION_RADIX"] : null);

                var tableRow = tableRows.FirstOrDefault((dRow, tName) => (string)dRow["TABLE_NAME"] == tName, tableName);

                var table = catalog.Tables.FirstOrDefault((t, vTuple) => t.Name == vTuple.tableName && t.Schema == vTuple.tableSchema, (tableName, tableSchema));
                if (table == null)
                {
                    table = new TableSchema {
                        Name = tableName, Schema = tableSchema
                    };
                    switch ((string)tableRow?["TABLE_TYPE"])
                    {
                    case "BASE TABLE":
                        table.Type = TableType.Table;
                        break;

                    case "VIEW":
                        table.Type = TableType.View;
                        break;
                    }
                    catalog.Tables.Add(table);
                }

                var tableColumn = table.Columns.FirstOrDefault((c, cName) => c.Name == cName, columnName);
                if (tableColumn == null)
                {
                    tableColumn = new TableColumnSchema
                    {
                        Name                  = columnName,
                        Position              = ordinalPosition,
                        IsNullable            = isNullable == "YES",
                        NumericPrecision      = numericPrecision,
                        NumericPrecisionRadix = numericPrecisionRadix
                    };

                    #region DataType Switch
                    switch (dataType)
                    {
                    case "uniqueidentifier":
                        tableColumn.DataType = (tableColumn.IsNullable ? "Guid?" : "Guid");
                        break;

                    case "char":
                    case "nchar":
                    case "varchar":
                    case "nvarchar":
                        tableColumn.DataType  = "string";
                        tableColumn.MaxLength = maxCharsLength;
                        break;

                    case "varbinary":
                    case "binary":
                    case "rowversion":
                        tableColumn.DataType  = "byte[]";
                        tableColumn.MaxLength = maxBytesLength;
                        break;

                    case "bigint":
                        tableColumn.DataType = (tableColumn.IsNullable ? "long?" : "long");
                        break;

                    case "int":
                        tableColumn.DataType = (tableColumn.IsNullable ? "int?" : "int");
                        break;

                    case "smallint":
                        tableColumn.DataType = (tableColumn.IsNullable ? "short?" : "short");
                        break;

                    case "tinyint":
                        tableColumn.DataType = (tableColumn.IsNullable ? "byte?" : "byte");
                        break;

                    case "bit":
                        tableColumn.DataType = (tableColumn.IsNullable ? "bool?" : "bool");
                        break;

                    case "real":
                        tableColumn.DataType = (tableColumn.IsNullable ? "float?" : "float");
                        break;

                    case "float":
                        tableColumn.DataType = (tableColumn.IsNullable ? "double?" : "double");
                        break;

                    case "smallmoney":
                    case "money":
                    case "numeric":
                    case "decimal":
                        tableColumn.DataType = (tableColumn.IsNullable ? "decimal?" : "decimal");
                        break;

                    case "date":
                    case "smalldatetime":
                    case "datetime":
                        tableColumn.DataType = (tableColumn.IsNullable ? "DateTime?" : "DateTime");
                        break;

                    case "geography":
                        tableColumn.DataType = "object";
                        break;
                    }
                    #endregion

                    table.Columns.Add(tableColumn);
                }
            }
            #endregion

            #region Create Indexes
            foreach (DataRow indexColumn in indexColumns.Rows)
            {
                var constraintName  = (string)indexColumn["constraint_name"];
                var tableSchema     = (string)indexColumn["table_schema"];
                var tableName       = (string)indexColumn["table_name"];
                var columnName      = (string)indexColumn["column_name"];
                var ordinalPosition = (int)indexColumn["ordinal_position"];
                var keyType         = (byte)indexColumn["KeyType"];
                var indexName       = (string)indexColumn["index_name"];


                var table = catalog.Tables.FirstOrDefault((t, vTuple) => t.Name == vTuple.tableName && t.Schema == vTuple.tableSchema, (tableName, tableSchema));
                if (table == null)
                {
                    continue;
                }

                var tIndex = table.Indexes.FirstOrDefault((i, iName) => i.Name == iName, indexName);
                if (tIndex == null)
                {
                    tIndex = new TableIndexSchema {
                        Name = indexName, ConstraintName = constraintName
                    };
                    if (indexName.StartsWith("PK_"))
                    {
                        tIndex.Type = IndexType.PrimaryKey;
                    }
                    else if (indexName.StartsWith("UK_"))
                    {
                        tIndex.Type = IndexType.UniqueKey;
                    }
                    else if (indexName.StartsWith("IX_"))
                    {
                        tIndex.Type = IndexType.NonClusteredNonUniqueIndex;
                    }
                    else if (indexName.StartsWith("UX_"))
                    {
                        tIndex.Type = IndexType.UniqueIndex;
                    }
                    else if (indexName.StartsWith("AK_"))
                    {
                        tIndex.Type = IndexType.AlternateIndex;
                    }
                    else if (indexName.StartsWith("CLIX_"))
                    {
                        tIndex.Type = IndexType.ClusteredIndex;
                    }
                    else if (indexName.StartsWith("COVIX_"))
                    {
                        tIndex.Type = IndexType.CoveringIndex;
                    }
                    else if (indexName.StartsWith("UC_"))
                    {
                        tIndex.Type = IndexType.UniqueClusteredIndex;
                    }
                    table.Indexes.Add(tIndex);
                }

                var tColumn = new TableIndexColumnSchema
                {
                    ColumnName     = columnName,
                    ColumnPosition = ordinalPosition,
                    KeyType        = keyType
                };
                tIndex.Columns.Add(tColumn);


                var column = table.Columns.FirstOrDefault((cName, colName) => cName.Name == colName, columnName);
                if (column != null && !column.IndexesName.Contains(indexName))
                {
                    column.IndexesName.Add(indexName);
                }
            }
            #endregion

            #region Create ForeignKeys
            foreach (DataRow foreignKey in foreignKeys.Rows)
            {
                var constraintName = (string)foreignKey["CONSTRAINT_NAME"];
                var tableSchema    = (string)foreignKey["TABLE_SCHEMA"];
                var tableName      = (string)foreignKey["TABLE_NAME"];

                var table = catalog.Tables.FirstOrDefault((t, vTuple) => t.Name == vTuple.tableName && t.Schema == vTuple.tableSchema, (tableName, tableSchema));
                if (table == null)
                {
                    continue;
                }

                var fkTable = constraintName.Replace(tableName, string.Empty);
                fkTable = fkTable.Substring(4);

                table.ForeignKeys.Add(new ForeignKeySchema
                {
                    ConstraintName = constraintName,
                    ForeignTable   = fkTable
                });
            }
            #endregion

            return(catalog);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Dal Generator
 /// </summary>
 /// <param name="schema">Catalog schema</param>
 /// <param name="namespace">Namespace name</param>
 public DalGenerator(CatalogSchema schema, string @namespace)
 {
     _schema    = schema;
     _namespace = @namespace;
 }