@@ -28,10 +28,82 @@ public bool UpdateFromSource(EntityContext generatedContext, GeneratorOptions op
2828 // make sure to update the entities before the context
2929 UpdateFromMapping ( generatedContext , options . Data . Mapping . Directory ) ;
3030 UpdateFromContext ( generatedContext , options . Data . Context . Directory ) ;
31+ UpdateFromModels ( generatedContext , options ) ;
3132
3233 return true ;
3334 }
3435
36+ private void UpdateFromModels ( EntityContext generatedContext , GeneratorOptions options )
37+ {
38+ if ( generatedContext == null || options == null )
39+ return ;
40+
41+ var parser = new ModelParser ( _loggerFactory ) ;
42+
43+ foreach ( var entity in generatedContext . Entities )
44+ {
45+ options . Variables . Set ( entity ) ;
46+
47+ foreach ( var model in entity . Models )
48+ {
49+ options . Variables . Set ( model ) ;
50+
51+ UpdateFromModel ( parser , model , options ) ;
52+
53+ options . Variables . Remove ( model ) ;
54+ }
55+
56+ options . Variables . Remove ( entity ) ;
57+ }
58+ }
59+
60+ private void UpdateFromModel ( ModelParser parser , Model model , GeneratorOptions options )
61+ {
62+ var modelDirectory = GetModelDirectory ( model , options ) ?? "Data\\ Models" ;
63+ if ( ! Directory . Exists ( modelDirectory ) )
64+ return ;
65+
66+ var modelFile = Path . Combine ( modelDirectory , model . ModelClass + ".cs" ) ;
67+ var parsedModel = parser . ParseFile ( modelFile ) ;
68+ if ( parsedModel == null || parsedModel . ModelClass != model . ModelClass )
69+ return ;
70+
71+ foreach ( var parsedProperty in parsedModel . Properties )
72+ {
73+ var property = model . Properties . ByProperty ( parsedProperty . PropertyName ) ;
74+ if ( property == null )
75+ continue ;
76+
77+ _logger . LogInformation (
78+ " Preserve attributes for Model Property '{PropertyName}' in Model '{ModelClass}'." ,
79+ parsedProperty . PropertyName ,
80+ model . ModelClass ) ;
81+
82+ model . PropertyAttributes [ parsedProperty . PropertyName ] = [ .. parsedProperty . Attributes ] ;
83+ }
84+ }
85+
86+ private static string ? GetModelDirectory ( Model model , GeneratorOptions options )
87+ {
88+ if ( model . ModelType == ModelType . Create )
89+ {
90+ return options . Model . Create . Directory . HasValue ( )
91+ ? options . Model . Create . Directory
92+ : options . Model . Shared . Directory ;
93+ }
94+
95+ if ( model . ModelType == ModelType . Update )
96+ {
97+ return options . Model . Update . Directory . HasValue ( )
98+ ? options . Model . Update . Directory
99+ : options . Model . Shared . Directory ;
100+ }
101+
102+ return options . Model . Read . Directory . HasValue ( )
103+ ? options . Model . Read . Directory
104+ : options . Model . Shared . Directory ;
105+ }
106+
35107
36108 private void UpdateFromContext ( EntityContext generatedContext , string ? contextDirectory )
37109 {
0 commit comments