@@ -56,10 +56,10 @@ internal static string Format(MemberExpression memberExpression, IdentifierEscap
56
56
return escaping switch
57
57
{
58
58
Never => memberExpression . GetMemberName ( metadataProvider ) ,
59
- Keywords when memberExpression . Member . GetCustomAttribute < PseudoColumnAttribute > ( ) != null => memberExpression . Member . Name ,
59
+ Keywords when IsPseudoColumn ( memberExpression . Member , metadataProvider ) => memberExpression . Member . Name ,
60
60
Keywords when IsValid ( memberExpression . GetMemberName ( metadataProvider ) ) && SystemColumns . IsValid ( memberExpression . GetMemberName ( metadataProvider ) ) => memberExpression . GetMemberName ( metadataProvider ) ,
61
61
Keywords => string . Concat ( "`" , memberExpression . GetMemberName ( metadataProvider ) , "`" ) ,
62
- Always when memberExpression . Member . GetCustomAttribute < PseudoColumnAttribute > ( ) != null => memberExpression . Member . Name ,
62
+ Always when IsPseudoColumn ( memberExpression . Member , metadataProvider ) => memberExpression . Member . Name ,
63
63
Always => string . Concat ( "`" , memberExpression . GetMemberName ( metadataProvider ) , "`" ) ,
64
64
_ => throw new ArgumentOutOfRangeException ( nameof ( escaping ) , escaping , "Non-exhaustive match." )
65
65
} ;
@@ -82,13 +82,26 @@ public static string Format(MemberInfo memberInfo, IdentifierEscaping escaping,
82
82
return escaping switch
83
83
{
84
84
Never => memberInfo . GetMemberName ( modelBuilder ) ,
85
- Keywords when memberInfo . GetCustomAttribute < PseudoColumnAttribute > ( ) != null => memberInfo . Name ,
85
+ Keywords when IsPseudoColumn ( memberInfo , modelBuilder ) => memberInfo . Name ,
86
86
Keywords when IsValid ( memberInfo . GetMemberName ( modelBuilder ) ) && SystemColumns . IsValid ( memberInfo . GetMemberName ( modelBuilder ) ) => memberInfo . GetMemberName ( modelBuilder ) ,
87
87
Keywords => string . Concat ( "`" , memberInfo . GetMemberName ( modelBuilder ) , "`" ) ,
88
- Always when memberInfo . GetCustomAttribute < PseudoColumnAttribute > ( ) != null => memberInfo . Name ,
88
+ Always when IsPseudoColumn ( memberInfo , modelBuilder ) => memberInfo . Name ,
89
89
Always => string . Concat ( "`" , memberInfo . GetMemberName ( modelBuilder ) , "`" ) ,
90
90
_ => throw new ArgumentOutOfRangeException ( nameof ( escaping ) , escaping , "Non-exhaustive match." )
91
91
} ;
92
92
}
93
+
94
+ private static bool IsPseudoColumn ( MemberInfo memberInfo , IMetadataProvider ? metadataProvider )
95
+ {
96
+ if ( memberInfo . GetCustomAttribute < PseudoColumnAttribute > ( ) != null )
97
+ return true ;
98
+
99
+ var entityMetadata = metadataProvider ? . GetEntities ( ) . FirstOrDefault ( c => c . Type == memberInfo . DeclaringType ) ;
100
+
101
+ var fieldMetadata =
102
+ entityMetadata ? . FieldsMetadata . FirstOrDefault ( c => c . MemberInfo . Name == memberInfo . Name ) ;
103
+
104
+ return fieldMetadata is { IsPseudoColumn : true } ;
105
+ }
93
106
}
94
107
}
0 commit comments