1
1
using System ;
2
+ using System . Collections . Generic ;
2
3
using System . Linq ;
3
4
using System . Reflection ;
4
5
using NHibernate . Cfg . MappingSchema ;
@@ -9,13 +10,15 @@ namespace NHibernate.Mapping.ByCode.Impl
9
10
public class IdMapper : IIdMapper
10
11
{
11
12
private readonly IAccessorPropertyMapper accessorMapper ;
13
+ private readonly MemberInfo member ;
12
14
private readonly HbmId hbmId ;
13
15
14
16
public IdMapper ( HbmId hbmId )
15
17
: this ( null , hbmId ) { }
16
18
17
19
public IdMapper ( MemberInfo member , HbmId hbmId )
18
20
{
21
+ this . member = member ;
19
22
this . hbmId = hbmId ;
20
23
if ( member != null )
21
24
{
@@ -68,14 +71,68 @@ public void UnsavedValue(object value)
68
71
hbmId . unsavedvalue = value != null ? value . ToString ( ) : "null" ;
69
72
}
70
73
74
+ public void Column ( Action < IColumnMapper > columnMapper )
75
+ {
76
+ if ( hbmId . Columns . Count ( ) > 1 )
77
+ throw new MappingException ( "Multi-columns property can't be mapped through singlr-column API." ) ;
78
+
79
+ HbmColumn hbm = hbmId . Columns . SingleOrDefault ( ) ?? new HbmColumn
80
+ {
81
+ name = hbmId . column1 ,
82
+ length = hbmId . length
83
+ } ;
84
+
85
+ string defaultColumnName = member != null ? member . Name : null ;
86
+ columnMapper ( new ColumnMapper ( hbm , member != null ? defaultColumnName : "unnamedcolumn" ) ) ;
87
+ if ( hbm . sqltype != null ||
88
+ hbm . @default != null ||
89
+ hbm . check != null ||
90
+ hbm . precision != null ||
91
+ hbm . scale != null ||
92
+ hbm . notnullSpecified ||
93
+ hbm . uniqueSpecified ||
94
+ hbm . uniquekey != null ||
95
+ hbm . index != null )
96
+ {
97
+ hbmId . column = new [ ] { hbm } ;
98
+ ResetIdPlainValues ( ) ;
99
+ }
100
+ else
101
+ {
102
+ hbmId . column1 = defaultColumnName == null || defaultColumnName != hbm . name ? hbm . name : null ;
103
+ hbmId . length = hbm . length ;
104
+ }
105
+ }
106
+
107
+ public void Columns ( params Action < IColumnMapper > [ ] columnMapper )
108
+ {
109
+ ResetIdPlainValues ( ) ;
110
+ int i = 1 ;
111
+ var columns = new List < HbmColumn > ( columnMapper . Length ) ;
112
+ foreach ( var action in columnMapper )
113
+ {
114
+ var hbm = new HbmColumn ( ) ;
115
+ string defaultColumnName = ( member != null ? member . Name : "unnamedcolumn" ) + i ++ ;
116
+ action ( new ColumnMapper ( hbm , defaultColumnName ) ) ;
117
+ columns . Add ( hbm ) ;
118
+ }
119
+ hbmId . column = columns . ToArray ( ) ;
120
+ }
121
+
71
122
public void Column ( string name )
72
123
{
73
- hbmId . column1 = name ;
124
+ Column ( x => x . Name ( name ) ) ;
74
125
}
75
126
76
127
public void Length ( int length )
77
128
{
78
- hbmId . length = length . ToString ( ) ;
129
+ Column ( x => x . Length ( length ) ) ;
130
+ }
131
+
132
+ private void ResetIdPlainValues ( )
133
+ {
134
+ hbmId . column1 = null ;
135
+ hbmId . length = null ;
79
136
}
80
137
81
138
private void ApplyGenerator ( IGeneratorDef generator )
0 commit comments