Пример #1
0
 private static MemberDeclarationSyntax[] BuildPropertyMembers(DatabaseTableDefinition tableDefinition)
 {
     return
         (tableDefinition.Columns.Select(CreatePropertyDeclarationSyntax)
          .Cast <MemberDeclarationSyntax>()
          .ToArray());
 }
Пример #2
0
        private static void Main()
        {
            var dtog = new DataTransferObjectGenerator();
            var databaseTableDefinition = new DatabaseTableDefinition
            {
                Name    = "Foobar",
                Columns = new[]
                {
                    new DatabaseColumnDefinition
                    {
                        SqlDataType = SqlDataType.NVarchar,
                        IsIdentity  = false,
                        IsNullable  = true,
                        Name        = "Name"
                    },
                    new DatabaseColumnDefinition
                    {
                        SqlDataType = SqlDataType.Decimal,
                        IsIdentity  = false,
                        IsNullable  = true,
                        Name        = "HeightInInches"
                    }
                }
            };
            var codeGenerationConfiguration = new CodeGenerationConfiguration
            {
                CoreNamespace = "Birchy.Core"
            };
            var generate = dtog.GenerateCode(codeGenerationConfiguration, databaseTableDefinition);

            System.Console.WriteLine(generate);
        }
Пример #3
0
        public string GenerateInsert(DatabaseTableDefinition tableDefitition)
        {
            string insert               = $"INSERT INTO [{tableDefitition.SchemaName}].[{tableDefitition.Name}]";
            var    nonIdentityColumns   = tableDefitition.Columns.Where(n => !n.IsIdentity).ToArray();
            var    formattedColumnNames = nonIdentityColumns.Select(s => $"[{s.Name}]");
            string columnDef            = $"({string.Join(",", formattedColumnNames)})";
            string values               = "VALUES";
            string dtoColumns           = $"({string.Join(",", nonIdentityColumns.Select(s => $"@{s.FormattedName}"))})";

            return($"{insert}{Environment.NewLine}{columnDef}\r\n{values}\r\n{dtoColumns}");
        }
        public void GenerateCode_CreatesCorrectDtoSourceCode_UgleColumnNames()
        {
            var dataTransferObjectGenerator = GetGenerator();
            var codeGenerationConfiguration = new CodeGenerationConfiguration {
                CoreNamespace = "Birchy.Core"
            };
            var databaseTableDefinition = new DatabaseTableDefinition
            {
                Name       = "TestTable",
                ObjectId   = 101,
                SchemaName = "dbo",
                Columns    = new[]
                {
                    new DatabaseColumnDefinition
                    {
                        Name        = "Foo_Id",
                        IsIdentity  = true,
                        IsNullable  = true,
                        SqlDataType = SqlDataType.Integer
                    },
                    new DatabaseColumnDefinition
                    {
                        Name        = "bar_id",
                        IsIdentity  = false,
                        IsNullable  = false,
                        SqlDataType = SqlDataType.Integer
                    },
                    new DatabaseColumnDefinition
                    {
                        Name        = "BazName",
                        SqlDataType = SqlDataType.NVarchar,
                        IsNullable  = true,
                        IsIdentity  = false
                    },
                    new DatabaseColumnDefinition
                    {
                        Name        = "birchy_weight",
                        SqlDataType = SqlDataType.Decimal,
                        IsIdentity  = false,
                        IsNullable  = true
                    }
                }
            };
            var generateCode = dataTransferObjectGenerator.GenerateCode(codeGenerationConfiguration, databaseTableDefinition);

            Assert.Contains("public class TestTableDto", generateCode);
            Assert.Contains("public int? FooId", generateCode);
            Assert.Contains("public int BarId", generateCode);
            Assert.Contains("public string BazName", generateCode);
            Assert.Contains("public decimal? BirchyWeight", generateCode);
            Assert.Contains("namespace Birchy.Core", generateCode);
        }
Пример #5
0
        public string GenerateSelect(DatabaseTableDefinition tableDefitition)
        {
            var select =
                new StringBuilder(
                    $"SELECT [{tableDefitition.Columns[0].Name}] AS [{tableDefitition.Columns[0].FormattedName}]\r\n");

            foreach (var databaseColumnDefinition in tableDefitition.Columns.Skip(1))
            {
                select.AppendLine(
                    $"    ,[{databaseColumnDefinition.Name}] AS [{databaseColumnDefinition.FormattedName}] ");
            }
            string from = $"FROM   [{tableDefitition.SchemaName}].[{tableDefitition.Name}]";

            return(select + from);
        }
Пример #6
0
        public string GenerateCode(CodeGenerationConfiguration config, DatabaseTableDefinition tableDefinition)
        {
            SyntaxNode compilationUnitSyntax = SyntaxFactory.CompilationUnit()
                                               .AddUsings(
                CreateUsingDirectives())
                                               .AddMembers(
                SyntaxFactory.NamespaceDeclaration(SyntaxFactory.ParseName(config.CoreNamespace))
                .AddMembers(
                    SyntaxFactory.ClassDeclaration(tableDefinition.DtoName)
                    .AddModifiers(SyntaxFactory.Token(SyntaxKind.PublicKeyword))
                    .AddMembers(BuildPropertyMembers(tableDefinition))
                    )
                );
            var adhocWorkspace = new AdhocWorkspace();
            var syntaxNode     = Formatter.Format(compilationUnitSyntax, adhocWorkspace);

            return(syntaxNode.ToFullString());
        }
Пример #7
0
        public string GenerateGatewayClass(CodeGenerationConfiguration configuration, DatabaseTableDefinition tableDefinition)
        {
            var          insertStatement = _sqlGenerator.GenerateInsert(tableDefinition);
            var          selectStatement = _sqlGenerator.GenerateSelect(tableDefinition);
            const string template        = @"using {0};

namespace {1}
{{
    public class {2}DataGateway : GatewayBase
    {{
        public {2}DataGateway(string connectionString) : base(connectionString)
        {{
        }}

        public {3}[] GetAll()
        {{
            const string sql = @""{4}"";
            return GetFromDatabase<{3}>(sql, null);
        }}

        public int AddItems({3}[] dtos)
        {{
            const string sql = @""{5}"";
            return AddToDatabase(sql, dtos);
        }}
    }}    
}}";

            return(string.Format(template, configuration.CoreNamespace, configuration.DataNamespace, tableDefinition.FormattedName, tableDefinition.DtoName, selectStatement, insertStatement));
        }