1
- using System ;
2
1
using System . Collections . Generic ;
3
- using System . Linq ;
4
2
using NHibernate . Persister . Entity ;
5
3
6
4
namespace NHibernate . Loader
7
5
{
8
- // Based on https://raw.githubusercontent.com/hibernate/hibernate-orm/master/hibernate-core/src/main/java/org/hibernate/loader/DefaultEntityAliases.java
9
6
/// <summary>
10
7
/// EntityAliases which handles the logic of selecting user provided aliases (via return-property),
11
8
/// before using the default aliases.
12
9
/// </summary>
13
10
public class DefaultEntityAliases : IEntityAliases
14
11
{
15
12
private readonly string _suffix ;
16
- private string _rowIdAlias ;
17
13
private readonly IDictionary < string , string [ ] > _userProvidedAliases ;
14
+ private string _rowIdAlias ;
18
15
19
16
public DefaultEntityAliases ( ILoadable persister , string suffix )
20
- : this ( null , persister , suffix ) { }
17
+ : this ( null , persister , suffix )
18
+ {
19
+ }
21
20
22
21
/// <summary>
23
22
/// Calculate and cache select-clause aliases.
@@ -28,40 +27,43 @@ public DefaultEntityAliases(IDictionary<string, string[]> userProvidedAliases, I
28
27
_userProvidedAliases = userProvidedAliases ? . Count > 0 ? userProvidedAliases : null ;
29
28
30
29
SuffixedKeyAliases = DetermineKeyAliases ( persister ) ;
31
- SuffixedPropertyAliases = GetSuffixedPropertyAliases ( persister ) ;
30
+ SuffixedPropertyAliases = DeterminePropertyAliases ( persister ) ;
32
31
SuffixedDiscriminatorAlias = DetermineDiscriminatorAlias ( persister ) ;
33
32
34
33
SuffixedVersionAliases = persister . IsVersioned ? SuffixedPropertyAliases [ persister . VersionProperty ] : null ;
35
34
//rowIdAlias is generated on demand in property
36
35
}
37
36
38
- private string [ ] DetermineKeyAliases ( ILoadable persister )
37
+ /// <summary>
38
+ /// Returns aliases for subclass persister
39
+ /// </summary>
40
+ public string [ ] [ ] GetSuffixedPropertyAliases ( ILoadable persister )
39
41
{
40
- if ( _userProvidedAliases != null )
41
- {
42
- var result = SafeGetUserProvidedAliases ( persister . IdentifierPropertyName ) ??
43
- GetUserProvidedAliases ( EntityPersister . EntityID ) ;
42
+ if ( _userProvidedAliases == null )
43
+ return GetAllPropertyAliases ( persister ) ;
44
44
45
- if ( result != null )
46
- return result ;
45
+ var propertyNames = persister . PropertyNames ;
46
+ var suffixedPropertyAliases = new string [ propertyNames . Length ] [ ] ;
47
+ for ( var i = 0 ; i < propertyNames . Length ; i ++ )
48
+ {
49
+ suffixedPropertyAliases [ i ] =
50
+ SafeGetUserProvidedAliases ( propertyNames [ i ] ) ??
51
+ GetPropertyAliases ( persister , i ) ;
47
52
}
48
53
49
- return GetIdentifierAliases ( persister , _suffix ) ;
54
+ return suffixedPropertyAliases ;
50
55
}
51
56
52
- private string DetermineDiscriminatorAlias ( ILoadable persister )
53
- {
54
- if ( _userProvidedAliases != null )
55
- {
56
- var columns = GetUserProvidedAliases ( AbstractEntityPersister . EntityClass ) ;
57
- if ( columns != null )
58
- {
59
- return columns [ 0 ] ;
60
- }
61
- }
57
+ public string [ ] SuffixedVersionAliases { get ; }
62
58
63
- return GetDiscriminatorAlias ( persister , _suffix ) ;
64
- }
59
+ public string [ ] [ ] SuffixedPropertyAliases { get ; }
60
+
61
+ public string SuffixedDiscriminatorAlias { get ; }
62
+
63
+ public string [ ] SuffixedKeyAliases { get ; }
64
+
65
+ // TODO: not visible to the user!
66
+ public string RowIdAlias => _rowIdAlias ?? ( _rowIdAlias = Loadable . RowIdAlias + _suffix ) ;
65
67
66
68
/// <summary>
67
69
/// Returns default aliases for all the properties
@@ -93,11 +95,42 @@ protected virtual string[] GetPropertyAliases(ILoadable persister, int j)
93
95
return persister . GetPropertyAliases ( _suffix , j ) ;
94
96
}
95
97
98
+ private string [ ] DetermineKeyAliases ( ILoadable persister )
99
+ {
100
+ if ( _userProvidedAliases != null )
101
+ {
102
+ var result = SafeGetUserProvidedAliases ( persister . IdentifierPropertyName ) ??
103
+ GetUserProvidedAliases ( EntityPersister . EntityID ) ;
104
+
105
+ if ( result != null )
106
+ return result ;
107
+ }
108
+
109
+ return GetIdentifierAliases ( persister , _suffix ) ;
110
+ }
111
+
112
+ private string [ ] [ ] DeterminePropertyAliases ( ILoadable persister )
113
+ {
114
+ return GetSuffixedPropertyAliases ( persister ) ;
115
+ }
116
+
117
+ private string DetermineDiscriminatorAlias ( ILoadable persister )
118
+ {
119
+ if ( _userProvidedAliases != null )
120
+ {
121
+ var columns = GetUserProvidedAliases ( AbstractEntityPersister . EntityClass ) ;
122
+ if ( columns != null )
123
+ return columns [ 0 ] ;
124
+ }
125
+
126
+ return GetDiscriminatorAlias ( persister , _suffix ) ;
127
+ }
128
+
96
129
private string [ ] SafeGetUserProvidedAliases ( string propertyPath )
97
130
{
98
131
if ( propertyPath == null )
99
132
return null ;
100
-
133
+
101
134
return GetUserProvidedAliases ( propertyPath ) ;
102
135
}
103
136
@@ -106,36 +139,5 @@ private string[] GetUserProvidedAliases(string propertyPath)
106
139
_userProvidedAliases . TryGetValue ( propertyPath , out var result ) ;
107
140
return result ;
108
141
}
109
-
110
- /// <summary>
111
- /// Returns aliases for subclass persister
112
- /// </summary>
113
- public string [ ] [ ] GetSuffixedPropertyAliases ( ILoadable persister )
114
- {
115
- if ( _userProvidedAliases == null )
116
- return GetAllPropertyAliases ( persister ) ;
117
-
118
- var propertyNames = persister . PropertyNames ;
119
- var suffixedPropertyAliases = new string [ propertyNames . Length ] [ ] ;
120
- for ( var i = 0 ; i < propertyNames . Length ; i ++ )
121
- {
122
- suffixedPropertyAliases [ i ] =
123
- SafeGetUserProvidedAliases ( propertyNames [ i ] ) ??
124
- GetPropertyAliases ( persister , i ) ;
125
- }
126
-
127
- return suffixedPropertyAliases ;
128
- }
129
-
130
- public string [ ] SuffixedVersionAliases { get ; }
131
-
132
- public string [ ] [ ] SuffixedPropertyAliases { get ; }
133
-
134
- public string SuffixedDiscriminatorAlias { get ; }
135
-
136
- public string [ ] SuffixedKeyAliases { get ; }
137
-
138
- // TODO: not visible to the user!
139
- public string RowIdAlias => _rowIdAlias ?? ( _rowIdAlias = Loadable . RowIdAlias + _suffix ) ;
140
142
}
141
143
}
0 commit comments