• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

loresoft / EntityFrameworkCore.Generator / 15303740763

28 May 2025 03:07PM UTC coverage: 54.841% (-0.2%) from 55.036%
15303740763

push

github

pwelter34
add file header support

642 of 1331 branches covered (48.23%)

Branch coverage included in aggregate %.

14 of 33 new or added lines in 14 files covered. (42.42%)

3 existing lines in 3 files now uncovered.

1873 of 3255 relevant lines covered (57.54%)

61.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/EntityFrameworkCore.Generator.Core/Templates/MapperClassTemplate.cs
1
using System.Collections.Generic;
2

3
using EntityFrameworkCore.Generator.Extensions;
4
using EntityFrameworkCore.Generator.Metadata.Generation;
5
using EntityFrameworkCore.Generator.Options;
6

7
namespace EntityFrameworkCore.Generator.Templates;
8

9
public class MapperClassTemplate : CodeTemplateBase
10
{
11
    private readonly Entity _entity;
12

13
    public MapperClassTemplate(Entity entity, GeneratorOptions options) : base(options)
×
14
    {
15
        _entity = entity;
×
16
    }
×
17

18
    public override string WriteCode()
19
    {
20
        CodeBuilder.Clear();
×
21

NEW
22
        if (Options.Model.Mapper.Header.HasValue())
×
NEW
23
            CodeBuilder.AppendLine(Options.Model.Mapper.Header).AppendLine();
×
24

25
        CodeBuilder.AppendLine("using System;");
×
NEW
26
        CodeBuilder.AppendLine();
×
UNCOV
27
        CodeBuilder.AppendLine("using AutoMapper;");
×
NEW
28
        CodeBuilder.AppendLine();
×
29

30
        var imports = new SortedSet<string>
×
31
        {
×
32
            _entity.EntityNamespace
×
33
        };
×
34

35
        foreach (var model in _entity.Models)
×
36
            imports.Add(model.ModelNamespace);
×
37

38
        foreach (var import in imports)
×
39
        {
40
            if (_entity.MapperNamespace != import)
×
41
                CodeBuilder.AppendLine($"using {import};");
×
42
        }
43

44
        CodeBuilder.AppendLine();
×
45

46
        CodeBuilder.Append($"namespace {_entity.MapperNamespace}");
×
47

48
        if (Options.Project.FileScopedNamespace)
×
49
        {
50
            CodeBuilder.AppendLine(";");
×
51
            CodeBuilder.AppendLine();
×
52
            GenerateClass();
×
53
        }
54
        else
55
        {
56
            CodeBuilder.AppendLine();
×
57
            CodeBuilder.AppendLine("{");
×
58

59
            using (CodeBuilder.Indent())
×
60
            {
61
                GenerateClass();
×
62
            }
×
63

64
            CodeBuilder.AppendLine("}");
×
65
        }
66

67
        return CodeBuilder.ToString();
×
68
    }
69

70
    private void GenerateClass()
71
    {
72
        var entityClass = _entity.EntityClass.ToSafeName();
×
73
        var mapperClass = _entity.MapperClass.ToSafeName();
×
74

75
        if (Options.Model.Mapper.Document)
×
76
        {
77
            CodeBuilder.AppendLine("/// <summary>");
×
78
            CodeBuilder.AppendLine($"/// Mapper class for entity <see cref=\"{entityClass}\"/> .");
×
79
            CodeBuilder.AppendLine("/// </summary>");
×
80
        }
81
        if (Options.Model.Mapper.Attributes.HasValue())
×
82
        {
83
            CodeBuilder.AppendLine(Options.Model.Mapper.Attributes);
×
84
        }
85
        CodeBuilder.AppendLine($"public partial class {mapperClass}");
×
86

87
        if (_entity.MapperBaseClass.HasValue())
×
88
        {
89
            var mapperBaseClass = _entity.MapperBaseClass.ToSafeName();
×
90
            using (CodeBuilder.Indent())
×
91
                CodeBuilder.AppendLine($": {mapperBaseClass}");
×
92
        }
93

94
        CodeBuilder.AppendLine("{");
×
95

96
        using (CodeBuilder.Indent())
×
97
        {
98
            GenerateConstructor();
×
99
        }
×
100

101
        CodeBuilder.AppendLine("}");
×
102
    }
×
103

104
    private void GenerateConstructor()
105
    {
106
        var mapperClass = _entity.MapperClass.ToSafeName();
×
107

108
        var entityClass = _entity.EntityClass.ToSafeName();
×
109
        var entityFullName = $"{_entity.EntityNamespace}.{entityClass}";
×
110

111
        if (Options.Model.Mapper.Document)
×
112
        {
113
            CodeBuilder.AppendLine("/// <summary>");
×
114
            CodeBuilder.AppendLine($"/// Initializes a new instance of the <see cref=\"{mapperClass}\"/> class.");
×
115
            CodeBuilder.AppendLine("/// </summary>");
×
116
        }
117

118
        CodeBuilder.AppendLine($"public {mapperClass}()");
×
119
        CodeBuilder.AppendLine("{");
×
120

121
        string? readFullName = null;
×
122
        string? updateFullName = null;
×
123

124
        using (CodeBuilder.Indent())
×
125
        {
126
            foreach (var model in _entity.Models)
×
127
            {
128
                var modelClass = model.ModelClass.ToSafeName();
×
129
                var modelFullName = $"{model.ModelNamespace}.{modelClass}";
×
130

131
                switch (model.ModelType)
×
132
                {
133
                    case ModelType.Read:
134
                        readFullName = modelFullName;
×
135
                        CodeBuilder.AppendLine($"CreateMap<{entityFullName}, {modelFullName}>();").AppendLine();
×
136
                        break;
×
137
                    case ModelType.Create:
138
                        CodeBuilder.AppendLine($"CreateMap<{modelFullName}, {entityFullName}>();").AppendLine();
×
139
                        CodeBuilder.AppendLine($"CreateMap<{entityFullName}, {modelFullName}>();").AppendLine();
×
140
                        break;
×
141
                    case ModelType.Update:
142
                        updateFullName = modelFullName;
×
143
                        CodeBuilder.AppendLine($"CreateMap<{entityFullName}, {modelFullName}>();").AppendLine();
×
144
                        CodeBuilder.AppendLine($"CreateMap<{modelFullName}, {entityFullName}>();").AppendLine();
×
145
                        break;
146
                }
147
            }
148

149
            // include support for coping read model to update model
150
            if (readFullName.HasValue() && updateFullName.HasValue())
×
151
                CodeBuilder.AppendLine($"CreateMap<{readFullName}, {updateFullName}>();").AppendLine();
×
152

153
        }
×
154

155
        CodeBuilder.AppendLine("}");
×
156
        CodeBuilder.AppendLine();
×
157
    }
×
158

159
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc