Пример #1
0
        static void Main(string[] args)
        {
            //Console.WriteLine($"Args: {String.Join(", ", args)}");

            Parser.Default.ParseArguments <Options>(args)
            .WithParsed(o =>
            {
                if (o.ds)
                {
                    if (o.TargetAssembly != null)
                    {
                        var datastore = CreateDatastore(o.TargetAssembly, o.TypeName, o.Params);

                        var ignoreColmns = (string.IsNullOrWhiteSpace(o.IgnoreColumns) == false) ?
                                           o.IgnoreColumns.Split(',')
                                : (string[])null;

                        var nonPersistedColumns = (string.IsNullOrWhiteSpace(o.NonPersistedColumns) == false) ?
                                                  o.IgnoreColumns.Split(',')
                                : (string[])null;

                        var schemaProvider = new SqliteDatastoreSchemaInfoProvider(datastore, ignoreColmns);

                        var modelGenerator = new CSModelGenerator();
                        modelGenerator.GenerateFiles(schemaProvider, o.Namespace, o.OutputDirectory, nonPersistedColumns);

                        //var plantUMLGenerator = new PlantUMLGenerator();
                        //plantUMLGenerator.GenerateFiles(schemaProvider, o.Namespace, o.OutputDirectory, nonPersistedColumns);

                        var mermadeGenerator = new MermaidGenerator();
                        mermadeGenerator.GenerateFiles(schemaProvider, o.Namespace, o.OutputDirectory, nonPersistedColumns);
                    }
                }
            });
        }
Пример #2
0
        public void GenerateClass_Test()
        {
            var tableinfo = new TableInfo()
            {
                TableName = "MyTable",
                Fields    = new[]
                {
                    new FieldInfo {
                        FieldName = "col1", DbType = "INTEGER"
                    },
                    new FieldInfo {
                        FieldName = "col2", DbType = "TEXT"
                    },
                    new FieldInfo {
                        FieldName = "col3", DbType = "DOUBLE"
                    },
                    new FieldInfo {
                        FieldName = "col4np", DbType = "DOUBLE"
                    },
                },
            };

            var nonPersistedColumns = new[] { "col4np" };

            var generatedCode = CSModelGenerator.GenerateClass(tableinfo, nonPersistedColumns: nonPersistedColumns);

            // parse C# to validate syntax
            var root = CSharpSyntaxTree.ParseText(generatedCode).GetRoot() as CompilationUnitSyntax;

            root.Should().NotBeNull();

            var @class = root.Members.Single() as ClassDeclarationSyntax;

            @class.Should().NotBeNull();

            // verify pocos have table attribute
            @class.AttributeLists.Should().NotBeEmpty();
            var attrs = @class.AttributeLists.SelectMany(x => x.Attributes).ToArray();

            attrs.Should().Contain(x => x.Name.ToString() == "Table", "model should have table attribute");


            var properties = @class.Members.OfType <PropertyDeclarationSyntax>().ToArray();

            properties.Should().HaveSameCount(tableinfo.Fields);

            foreach (var prop in properties)
            {
                var pAttrs = prop.AttributeLists.SelectMany(x => x.Attributes);

                // verify nonPersisted fields have PersistanceFlags.Never
                if (nonPersistedColumns.Contains(prop.Identifier.ValueText))
                {
                    pAttrs.Should().Contain(x => x.ToString().Contains("PersistanceFlags.Never"));
                }
            }
        }