@@ -96,10 +96,15 @@ protected IIdentifiable SetRelationships(IIdentifiable entity, Dictionary<string
96
96
var entityProperties = entity . GetType ( ) . GetProperties ( ) ;
97
97
foreach ( var attr in relationshipAttributes )
98
98
{
99
+ relationshipsValues . TryGetValue ( attr . PublicRelationshipName , out RelationshipData relationshipData ) ;
100
+
101
+ if ( relationshipData == null || ! relationshipData . HasData )
102
+ continue ;
103
+
99
104
if ( attr is HasOneAttribute hasOne )
100
- SetHasOneRelationship ( entity , entityProperties , ( HasOneAttribute ) attr , relationshipsValues ) ;
105
+ SetHasOneRelationship ( entity , entityProperties , ( HasOneAttribute ) attr , relationshipData ) ;
101
106
else
102
- SetHasManyRelationship ( entity , ( HasManyAttribute ) attr , relationshipsValues ) ;
107
+ SetHasManyRelationship ( entity , ( HasManyAttribute ) attr , relationshipData ) ;
103
108
104
109
}
105
110
return entity ;
@@ -152,16 +157,13 @@ private IIdentifiable ParseResourceObject(ResourceObject data)
152
157
/// <param name="entity"></param>
153
158
/// <param name="entityProperties"></param>
154
159
/// <param name="attr"></param>
155
- /// <param name="relationships "></param>
160
+ /// <param name="relationshipData "></param>
156
161
/// <returns></returns>
157
162
private object SetHasOneRelationship ( IIdentifiable entity ,
158
163
PropertyInfo [ ] entityProperties ,
159
164
HasOneAttribute attr ,
160
- Dictionary < string , RelationshipData > relationships )
165
+ RelationshipData relationshipData )
161
166
{
162
- if ( relationships . TryGetValue ( attr . PublicRelationshipName , out RelationshipData relationshipData ) == false )
163
- return entity ;
164
-
165
167
var rio = ( ResourceIdentifierObject ) relationshipData . Data ;
166
168
var relatedId = rio ? . Id ?? null ;
167
169
@@ -173,13 +175,10 @@ private object SetHasOneRelationship(IIdentifiable entity,
173
175
/// i.e. we're populating the relationship from the dependent side.
174
176
SetForeignKey ( entity , foreignKeyProperty , attr , relatedId ) ;
175
177
176
-
177
178
SetNavigation ( entity , attr , relatedId ) ;
178
-
179
-
180
-
181
- // allow for additional processing of relationships as required for the
182
- // serializer class that implements this abstract class.
179
+
180
+ /// depending on if this base parser is used client-side or server-side,
181
+ /// different additional processing per field needs to be executed.
183
182
AfterProcessField ( entity , attr , relationshipData ) ;
184
183
185
184
return entity ;
@@ -226,24 +225,18 @@ private void SetNavigation(IIdentifiable entity, HasOneAttribute attr, string re
226
225
/// </summary>
227
226
private object SetHasManyRelationship ( IIdentifiable entity ,
228
227
HasManyAttribute attr ,
229
- Dictionary < string , RelationshipData > relationships )
228
+ RelationshipData relationshipData )
230
229
{
231
- if ( relationships . TryGetValue ( attr . PublicRelationshipName , out RelationshipData relationshipData ) )
230
+ var relatedResources = relationshipData . ManyData . Select ( rio =>
232
231
{
233
- if ( ! relationshipData . IsManyData )
234
- return entity ;
232
+ var relatedInstance = attr . DependentType . New < IIdentifiable > ( ) ;
233
+ relatedInstance . StringId = rio . Id ;
234
+ return relatedInstance ;
235
+ } ) ;
235
236
236
- var relatedResources = relationshipData . ManyData . Select ( rio =>
237
- {
238
- var relatedInstance = attr . DependentType . New < IIdentifiable > ( ) ;
239
- relatedInstance . StringId = rio . Id ;
240
- return relatedInstance ;
241
- } ) ;
242
-
243
- var convertedCollection = TypeHelper . ConvertCollection ( relatedResources , attr . DependentType ) ;
244
- attr . SetValue ( entity , convertedCollection ) ;
245
- AfterProcessField ( entity , attr , relationshipData ) ;
246
- }
237
+ var convertedCollection = TypeHelper . ConvertCollection ( relatedResources , attr . DependentType ) ;
238
+ attr . SetValue ( entity , convertedCollection ) ;
239
+ AfterProcessField ( entity , attr , relationshipData ) ;
247
240
248
241
return entity ;
249
242
}
0 commit comments