@@ -86,38 +86,57 @@ private ICollection<PropertySelector> ToPropertySelectors(IDictionary<ResourceFi
86
86
{
87
87
var propertySelectors = new Dictionary < PropertyInfo , PropertySelector > ( ) ;
88
88
89
- // If a read-only attribute is selected, its value likely depends on another property, so select all resource properties.
89
+ // If a read-only attribute is selected, its calculated value likely depends on another property, so select all properties.
90
90
bool includesReadOnlyAttribute = resourceFieldSelectors . Any ( selector =>
91
91
selector . Key is AttrAttribute attribute && attribute . Property . SetMethod == null ) ;
92
92
93
+ // Only selecting relationships implicitly means to select all attributes too.
93
94
bool containsOnlyRelationships = resourceFieldSelectors . All ( selector => selector . Key is RelationshipAttribute ) ;
94
95
95
- foreach ( ( ResourceFieldAttribute resourceField , QueryLayer ? queryLayer ) in resourceFieldSelectors )
96
+ if ( includesReadOnlyAttribute || containsOnlyRelationships )
96
97
{
97
- var propertySelector = new PropertySelector ( resourceField . Property , queryLayer ) ;
98
-
99
- if ( propertySelector . Property . SetMethod != null )
100
- {
101
- propertySelectors [ propertySelector . Property ] = propertySelector ;
102
- }
98
+ IncludeAllProperties ( elementType , propertySelectors ) ;
103
99
}
104
100
105
- if ( includesReadOnlyAttribute || containsOnlyRelationships )
101
+ IncludeFieldSelection ( resourceFieldSelectors , propertySelectors ) ;
102
+
103
+ IncludeEagerLoads ( resourceType , propertySelectors ) ;
104
+
105
+ return propertySelectors . Values ;
106
+ }
107
+
108
+ private void IncludeAllProperties ( Type elementType , Dictionary < PropertyInfo , PropertySelector > propertySelectors )
109
+ {
110
+ IEntityType entityModel = _entityModel . GetEntityTypes ( ) . Single ( type => type . ClrType == elementType ) ;
111
+ IEnumerable < IProperty > entityProperties = entityModel . GetProperties ( ) . Where ( property => ! property . IsShadowProperty ( ) ) . ToArray ( ) ;
112
+
113
+ foreach ( IProperty entityProperty in entityProperties )
106
114
{
107
- IEntityType entityModel = _entityModel . GetEntityTypes ( ) . Single ( type => type . ClrType == elementType ) ;
108
- IEnumerable < IProperty > entityProperties = entityModel . GetProperties ( ) . Where ( property => ! property . IsShadowProperty ( ) ) . ToArray ( ) ;
115
+ var propertySelector = new PropertySelector ( entityProperty . PropertyInfo ) ;
116
+ IncludeWritableProperty ( propertySelector , propertySelectors ) ;
117
+ }
118
+ }
109
119
110
- foreach ( IProperty entityProperty in entityProperties )
111
- {
112
- var propertySelector = new PropertySelector ( entityProperty . PropertyInfo ! ) ;
120
+ private static void IncludeFieldSelection ( IDictionary < ResourceFieldAttribute , QueryLayer ? > resourceFieldSelectors ,
121
+ Dictionary < PropertyInfo , PropertySelector > propertySelectors )
122
+ {
123
+ foreach ( ( ResourceFieldAttribute resourceField , QueryLayer ? queryLayer ) in resourceFieldSelectors )
124
+ {
125
+ var propertySelector = new PropertySelector ( resourceField . Property , queryLayer ) ;
126
+ IncludeWritableProperty ( propertySelector , propertySelectors ) ;
127
+ }
128
+ }
113
129
114
- if ( propertySelector . Property . SetMethod != null )
115
- {
116
- propertySelectors [ propertySelector . Property ] = propertySelector ;
117
- }
118
- }
130
+ private static void IncludeWritableProperty ( PropertySelector propertySelector , Dictionary < PropertyInfo , PropertySelector > propertySelectors )
131
+ {
132
+ if ( propertySelector . Property . SetMethod != null )
133
+ {
134
+ propertySelectors [ propertySelector . Property ] = propertySelector ;
119
135
}
136
+ }
120
137
138
+ private static void IncludeEagerLoads ( ResourceType resourceType , Dictionary < PropertyInfo , PropertySelector > propertySelectors )
139
+ {
121
140
foreach ( EagerLoadAttribute eagerLoad in resourceType . EagerLoads )
122
141
{
123
142
var propertySelector = new PropertySelector ( eagerLoad . Property ) ;
@@ -129,8 +148,6 @@ private ICollection<PropertySelector> ToPropertySelectors(IDictionary<ResourceFi
129
148
propertySelectors [ propertySelector . Property ] = propertySelector ;
130
149
}
131
150
}
132
-
133
- return propertySelectors . Values ;
134
151
}
135
152
136
153
private MemberAssignment CreatePropertyAssignment ( PropertySelector selector , LambdaScope lambdaScope )
0 commit comments