public ClassOutputModel CreateEntityGeneratedClass(Base.Models.Entity.Entity entity, string language) { var targetPlatform = entity.OutputConfiguration.GetTargetPlatformsForDesignModel(entity).FirstOrDefault(); if (targetPlatform == null) { throw new ConfigurationException( $"No target platforms defined for design model type '{entity.DesignModelType}'."); } var namingConvention = (IClassNamingConvention)targetPlatform.GetNamingConvention(language); var outputModelType = NHibernatePluginConstants.OutputModelType_Entity_GeneratedClass; var builder = new ClassOutputModelBuilder(outputModelType, entity, namingConvention); builder.CreatePartialClass(entity.Name, entity.Namespace); builder.SetOutputFile(entity.OutputConfiguration, namingConvention, fileExtension: ".gen.cs", mergeMode: OutputModelMergeMode.Replace); builder.SetOutputRenderer(targetPlatform.GetOutputTemplate(outputModelType)); foreach (var entityAttribute in entity.Attributes) { builder.CreateProperty(entityAttribute.Name, namingConvention.GetTypeName(entityAttribute.Type)); } return(builder.Build()); }
public void Generate_CSharp_from_output_model() { var ns = new Namespace("MyApp.MyTest", null); var builder = new ClassOutputModelBuilder("test", null, new TestClassNamingConvention()); builder.CreateClass("MyClass", ns); builder.CreateProperty("Name", "string"); var outputModel = builder.Build(); var instance = Handlebars.Create(new HandlebarsConfiguration { TextEncoder = new NoopTextEncoder() }); var template = new Template("test", instance, TemplateSource.CreateForText(@" namespace {{Model.ClassNamespace}} public class {{Model.ClassName}} { {{#each Model.Properties}} public {{Type.TypeName}} {{Name}} { get; set; } {{/each}} } ")); var renderer = new ClassOutputModelRenderer(template); var actual = default(string); var expected = @" namespace MyApp.MyTest public class MyClass { public string Name { get; set; } } "; using (var writer = new StringWriter()) { renderer.Render(outputModel, writer); actual = writer.ToString(); } actual.Should().Be(expected); }