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); } } }); }
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")); } } }