private static MemberDeclarationSyntax[] BuildPropertyMembers(DatabaseTableDefinition tableDefinition) { return (tableDefinition.Columns.Select(CreatePropertyDeclarationSyntax) .Cast <MemberDeclarationSyntax>() .ToArray()); }
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); }
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); }
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); }
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()); }
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)); }