コード例 #1
0
        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());
        }
コード例 #2
0
        public ClassOutputModel CreateEntityCustomClass(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 = targetPlatform.GetClassNamingConvention(language);
            var outputModelType  = EntityPluginConstants.OutputModelType_Entity_CustomClass;
            var builder          = new ClassOutputModelBuilder(outputModelType, entity, namingConvention);

            builder.CreatePartialClass(entity.Name, entity.Namespace);
            builder.SetOutputFile(entity.OutputConfiguration, namingConvention, fileExtension: ".cs");
            builder.SetOutputRenderer(targetPlatform.GetOutputTemplate(outputModelType));

            return(builder.Build());
        }
コード例 #3
0
        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);
        }