Esempio n. 1
0
        //[Test]
        public void T()
        {
            var bclTypesParser = new BclTypesParser();
            var domainBuilder = new DomainBuilder("Test.Dto", type => bclTypesParser.GetParser(type) == null);
            var foo = new EntityModel("Foo", new[] { new PropertyModel("Index", typeof(int)), });
            var bar = new EntityModel("Bar", new List<PropertyModel>(){
                new PropertyModel("Foo", foo, new List<object>())
            }, new List<object>());

            domainBuilder
                .AddEntity(foo)
                .AddEntity(bar);

            domainBuilder
                .Transform(
                model => model.Name == foo.Name,
                new Transformation<EntityModel>().Map(
                    model => model.Properties,
                    model => model.Properties.Concat(new[]
                    {
                        new PropertyModel<string>("Name", null, Visibility.Public)
                    }).ToList()))
                    .ToList();

            var transformedDomain = domainBuilder.GetDomain();
            var csCodeGenerator = new CsCodeGenerator(transformedDomain);

            var barCode = string.Join(Environment.NewLine, csCodeGenerator.GetClass(bar.Name));
            var fooCode = string.Join(Environment.NewLine, csCodeGenerator.GetClass(foo.Name));
        }
Esempio n. 2
0
 private static IEnumerable<string> GenerateCtor(EntityModel entity, IReadOnlyCollection<IPropertyModel> classProps)
 {
     var ctorArgs = string.Join(", ", classProps.Select(p => p.TypeFullName + " " + p.Name));
     yield return $"public {entity.Name}({ctorArgs}) {{";
     foreach (var prop in classProps)
     {
         yield return $"\tthis.{prop.Name} = {prop.Name};";
     }
     yield return "}";
 }
Esempio n. 3
0
        private IEnumerable<string> GetMappingCode(
            Type sourceType,
            EntityModel dstModel,
            IReadOnlyDictionary<PropertyModel, LambdaExpression> propsMappings)
        {
            var dstTypeName = dstModel.Name;

            yield return $"public static {dstTypeName} Map(this {sourceType.Name} x){{";
            foreach (var mapping in propsMappings)
            {
                yield return $"\tvar {mapping.Key.Name.ToCamelCase()} = ({GetMappingCode(mapping.Value)})(x);";
            }

            var args = dstModel.Properties.Select(model => model.Name.ToCamelCase());
            yield return $"\treturn new {dstTypeName}({string.Join(", ", args)})";
            yield return "}";
        }