Exemple #1
0
        public void Should_Read_Sql_Schema()
        {
            var dataReaderMock = SetupNoForeignKeysDataReader();
            var commandMock = new Mock<IDbCommand>();
            commandMock.Setup(command => command.ExecuteReader()).Returns(dataReaderMock.Object);

            var (columnsDataTable, indexesDataTable) = SetupSchemaTables();
            var connectionMock = new Mock<ISqlClientConnection>();
            connectionMock.Setup(conn => conn.GetSchema(It.Is<string>(str => str == "Columns"))).Returns(columnsDataTable);
            connectionMock.Setup(conn => conn.GetSchema(It.Is<string>(str => str ==  "IndexColumns"), It.IsAny<string[]>())).Returns(indexesDataTable);
            connectionMock.Setup(conn => conn.CreateCommand()).Returns(commandMock.Object);

            var connectionFactoryMock = new Mock<ISqlClientConnectionFactory>();
            connectionFactoryMock.Setup(factory => factory.Create(It.IsAny<string>())).Returns(connectionMock.Object);

            var schemaReader = new SqlClientSchemaReader(connectionFactoryMock.Object, new OutputWriter());
            var model = schemaReader.Read("Integrated Security=true;Initial Catalog=NorthWind;Server=Localhost;Persist Security Info=False");

            model.Entities.Count.Should().Be(1);

            var entity = model.Entities[0];
            entity.Name.Should().Be("Categories");
            entity.Schema.Should().Be("dbo");

            entity.Columns.Count.Should().Be(2);

            var categoryId = entity.Columns[0];
            categoryId.Name.Should().Be("CategoryId");
            categoryId.DataType.Should().Be("int");
            categoryId.Size.Should().Be(-1);
            categoryId.IsNullable.Should().Be(false);

            var categoryName = entity.Columns[1];
            categoryName.Name.Should().Be("CategoryName");
            categoryName.DataType.Should().Be("nvarchar");
            categoryName.Size.Should().Be(255);
            categoryName.IsNullable.Should().Be(false);

            entity.PrimaryKeys.Count.Should().Be(1);

            var primaryKey = entity.PrimaryKeys[0];
            primaryKey.Entity.Should().Be("Categories");
            primaryKey.Name.Should().Be("CategoryId");
        }
Exemple #2
0
        private static ExitCode ProcessCommandLineArgs(string[] args)
        {
            var commandContext             = new CommandContext();
            var outputWriter               = new OutputWriter();
            var sqlClientConnectionFactory = new SqlClientConnectionFactory();
            var sqlClientSchemaReader      = new SqlClientSchemaReader(sqlClientConnectionFactory, outputWriter);
            var assemblyReader             = new DotnetAssemblyReader(outputWriter);
            var assemblyMetadataWriter     = new DotnetAssemblyMetadataWriter(outputWriter);
            var dbModelMetadataReader      = new ModelMetadataReader();
            var dbModelMetadataWriter      = new DbModelMetadataWriter(outputWriter);
            var transformer      = new Transformer(outputWriter);
            var directoryWrapper = new DirectoryWrapper();
            var fileWrapper      = new FileWrapper();

            var factory = new CommandFactory(
                sqlClientSchemaReader,
                assemblyReader,
                dbModelMetadataWriter,
                assemblyMetadataWriter,
                dbModelMetadataReader,
                transformer,
                outputWriter,
                directoryWrapper,
                fileWrapper,
                commandContext);

            ICommand command  = null;
            int      argIndex = 0;

            for (; argIndex < args.Length; argIndex++)
            {
                if (IsValidArgument("h", "help", args[argIndex]) ||
                    IsValidArgument("?", args[argIndex]) ||
                    args[argIndex] == "?")
                {
                    return(factory.Create("help")
                           .Execute());
                }
                else if (IsValidArgument("nologo", args[argIndex]))
                {
                    commandContext.NoLogo = true;
                }
                else if (IsValidArgument("verbose", args[argIndex]))
                {
                    commandContext.VerboseLogging = true;
                    outputWriter.IsVerbose        = true;
                }
                else if (IsValidArgument("v", "version", args[argIndex]))
                {
                    return(factory.Create("version")
                           .Execute());
                }
                else if (args[argIndex].StartsWith("-", StringComparison.CurrentCultureIgnoreCase))
                {
                    outputWriter.Error.WriteLine($"Unknown startup option: {args[argIndex]}");
                    return(ExitCode.Error);
                }
                else
                {
                    string lastArg = args[argIndex];

                    if (string.IsNullOrEmpty(lastArg))
                    {
                        return(factory.Create("help")
                               .Execute());
                    }

                    List <string> commandArgs = (argIndex + 1) >= args.Length
                        ? new List <string>()
                        : args.Skip(argIndex + 1).ToList();

                    commandContext.CommandArgs = commandArgs;
                    PrintBanner(commandContext, outputWriter);
                    command = factory.Create(lastArg);
                    break;
                }
            }

            if (command == null)
            {
                command = factory.Create("help");
            }

            return(command.Execute());
        }