2
2
using System . Text ;
3
3
using NHibernate . Util ;
4
4
using System ;
5
+ using System . Linq ;
5
6
6
7
namespace NHibernate . Mapping
7
8
{
@@ -14,7 +15,7 @@ public class ForeignKey : Constraint
14
15
private Table referencedTable ;
15
16
private string referencedEntityName ;
16
17
private bool cascadeDeleteEnabled ;
17
- private readonly List < Column > referencedColumns = new List < Column > ( ) ;
18
+ private List < Column > referencedColumns ;
18
19
19
20
/// <summary>
20
21
/// Generates the SQL string to create the named Foreign Key Constraint in the database.
@@ -35,7 +36,7 @@ public override string SqlConstraintString(Dialect.Dialect d, string constraintN
35
36
if ( IsReferenceToPrimaryKey )
36
37
refiter = referencedTable . PrimaryKey . ColumnIterator ;
37
38
else
38
- refiter = referencedColumns ;
39
+ refiter = referencedColumns ?? Enumerable . Empty < Column > ( ) ;
39
40
foreach ( Column column in ColumnIterator )
40
41
{
41
42
cols [ i ] = column . GetQuotedName ( d ) ;
@@ -172,13 +173,14 @@ public virtual void AddReferencedColumns(IEnumerable<Column> referencedColumnsIt
172
173
173
174
private void AddReferencedColumn ( Column column )
174
175
{
176
+ referencedColumns ??= new List < Column > ( 1 ) ;
175
177
if ( ! referencedColumns . Contains ( column ) )
176
178
referencedColumns . Add ( column ) ;
177
179
}
178
180
179
181
internal void AddReferencedTable ( PersistentClass referencedClass )
180
182
{
181
- if ( referencedColumns . Count > 0 )
183
+ if ( referencedColumns != null && referencedColumns . Count > 0 )
182
184
{
183
185
referencedTable = referencedColumns [ 0 ] . Value . Table ;
184
186
}
@@ -199,7 +201,7 @@ public override string ToString()
199
201
. Append ( string . Join ( ", " , Columns ) )
200
202
. Append ( " ref-columns:" )
201
203
. Append ( '(' )
202
- . Append ( string . Join ( ", " , ReferencedColumns ) )
204
+ . Append ( string . Join ( ", " , ReferencedColumnsReadOnly ) )
203
205
. Append ( ") as " )
204
206
. Append ( Name ) ;
205
207
return result . ToString ( ) ;
@@ -218,7 +220,16 @@ public bool HasPhysicalConstraint
218
220
219
221
public IList < Column > ReferencedColumns
220
222
{
221
- get { return referencedColumns ; }
223
+ get
224
+ {
225
+ referencedColumns ??= new List < Column > ( 1 ) ;
226
+ return referencedColumns ;
227
+ }
228
+ }
229
+
230
+ private IEnumerable < Column > ReferencedColumnsReadOnly
231
+ {
232
+ get { return referencedColumns ?? Enumerable . Empty < Column > ( ) ; }
222
233
}
223
234
224
235
public string ReferencedEntityName
@@ -230,7 +241,7 @@ public string ReferencedEntityName
230
241
/// <summary>Does this foreignkey reference the primary key of the reference table </summary>
231
242
public bool IsReferenceToPrimaryKey
232
243
{
233
- get { return referencedColumns . Count == 0 ; }
244
+ get { return referencedColumns == null || referencedColumns . Count == 0 ; }
234
245
}
235
246
236
247
public string GeneratedConstraintNamePrefix => "FK_" ;
@@ -242,7 +253,7 @@ public override bool IsGenerated(Dialect.Dialect dialect)
242
253
if ( dialect . SupportsNullInUnique || IsReferenceToPrimaryKey )
243
254
return true ;
244
255
245
- foreach ( var column in ReferencedColumns )
256
+ foreach ( var column in ReferencedColumnsReadOnly )
246
257
{
247
258
if ( column . IsNullable )
248
259
return false ;
0 commit comments