public void Should_Write_Metadata_File()
        {
            using (var tempFile = new TempFile(".xml"))
            {
                var writer   = new DbModelMetadataWriter(new OutputWriter());
                var document = writer.Write(_model);
                document.Save(tempFile.Filename);
                var lines = File.ReadAllLines(tempFile.Filename);

                lines[0].Should().Be("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                lines[1].Should().Be("<mdr:metadataroot metadataprovider=\"GenX.Cli.Infrastructure.DbModelMetadataWriter\" freeform=\"true\" xmlns:mdr=\"http://genx.com/metadataroot\">");
                lines[2].Should().Be("  <md:dataStructure name=\"dbname\" xmlns:md=\"http://genx.com/metadata\">");
                lines[3].Should().Be("    <md:entities>");
                lines[4].Should().Be("      <md:entity name=\"Category\" originalname=\"Category\" camelcase=\"category\">");
                lines[5].Should().Be("        <md:entitycolumns>");
                lines[6].Should().Be("          <md:column name=\"CategoryId\" originalname=\"CategoryId\" label=\"CategoryId\" camelcase=\"categoryId\" datatype=\"integer\" maxlength=\"4\" allownulls=\"false\" isprimarykey=\"false\" />");
                lines[7].Should().Be("          <md:column name=\"CategoryName\" originalname=\"CategoryName\" label=\"CategoryName\" camelcase=\"categoryName\" datatype=\"nvarchar\" maxlength=\"255\" allownulls=\"false\" isprimarykey=\"false\" />");
                lines[8].Should().Be("        </md:entitycolumns>");
                lines[9].Should().Be("        <md:relationships>");
                lines[10].Should().Be("          <md:relationship name=\"Product.CategoryId_Category.CategoryId\" foreignkeyentity=\"Product\" foreignkeyentitycamelcase=\"product\" foreignkeycolumn=\"CategoryId\" foreignkeycolumncamelcase=\"categoryId\" />");
                lines[11].Should().Be("        </md:relationships>");
                lines[12].Should().Be("      </md:entity>");
                lines[13].Should().Be("      <md:entity name=\"Product\" originalname=\"Product\" camelcase=\"product\">");
                lines[14].Should().Be("        <md:entitycolumns>");
                lines[15].Should().Be("          <md:column name=\"ProductId\" originalname=\"ProductId\" label=\"ProductId\" camelcase=\"productId\" datatype=\"integer\" maxlength=\"4\" allownulls=\"false\" isprimarykey=\"false\" />");
                lines[16].Should().Be("          <md:column name=\"ProductName\" originalname=\"ProductName\" label=\"ProductName\" camelcase=\"productName\" datatype=\"nvarchar\" maxlength=\"255\" allownulls=\"false\" isprimarykey=\"false\" />");
                lines[17].Should().Be("          <md:column name=\"CategoryId\" originalname=\"CategoryId\" label=\"CategoryId\" camelcase=\"categoryId\" datatype=\"integer\" maxlength=\"4\" allownulls=\"false\" isprimarykey=\"false\">");
                lines[18].Should().Be("            <md:foreignkeys>");
                lines[19].Should().Be("              <md:foreignkey name=\"CategoryId\" primarykeyentity=\"Category\" primarykeycolumn=\"CategoryId\" />");
                lines[20].Should().Be("            </md:foreignkeys>");
                lines[21].Should().Be("          </md:column>");
                lines[22].Should().Be("        </md:entitycolumns>");
                lines[23].Should().Be("        <md:relationships />");
                lines[24].Should().Be("      </md:entity>");
                lines[25].Should().Be("    </md:entities>");
                lines[26].Should().Be("  </md:dataStructure>");
                lines[27].Should().Be("</mdr:metadataroot>");
            }
        }
Esempio n. 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());
        }