@@ -203,6 +203,46 @@ public void ShouldHandleEverettsWeirdMapping()
203
203
colorSource . Subclasses . ShouldContain ( x => x . Type == typeof ( Sauces . ReallyHotSauce ) ) ;
204
204
colorSource . Subclasses . Count ( ) . ShouldEqual ( 2 ) ;
205
205
}
206
+
207
+ [ Test ]
208
+ public void CanBuildConfigurationForTablePerType ( )
209
+ {
210
+ var model = new PersistenceModel ( ) ;
211
+ model . Add ( new TablePerType . TPT_TopMap ( ) ) ;
212
+ model . Add ( new TablePerType . TPT_TopSubclassMap ( ) ) ;
213
+ model . Add ( new TablePerType . TPT_MiddleMap ( ) ) ;
214
+ model . Add ( new TablePerType . TPT_MiddleSubclassMap ( ) ) ;
215
+
216
+ var classMapping = model . BuildMappings ( ) ;
217
+ classMapping . Count ( ) . ShouldEqual ( 1 ) ;
218
+
219
+ var top = classMapping . First ( ) . Classes . First ( ) ;
220
+ top . Subclasses . Count ( ) . ShouldEqual ( 2 ) ;
221
+
222
+ var middle = top . Subclasses . SingleOrDefault ( sc => sc . Type == typeof ( TablePerType . TPT_Middle ) ) ;
223
+ middle . ShouldNotBeNull ( ) ;
224
+ middle . Subclasses . Count ( ) . ShouldEqual ( 1 ) ;
225
+ }
226
+
227
+ [ Test ]
228
+ public void CanBuildConfigurationForTablePerTypeWithInterfaces ( )
229
+ {
230
+ var model = new PersistenceModel ( ) ;
231
+ model . Add ( new TablePerTypeWithInterfaces . TPTWI_ITopMap ( ) ) ;
232
+ model . Add ( new TablePerTypeWithInterfaces . TPTWI_TopSubclassMap ( ) ) ;
233
+ model . Add ( new TablePerTypeWithInterfaces . TPTWI_IMiddleMap ( ) ) ;
234
+ model . Add ( new TablePerTypeWithInterfaces . TPTWI_MiddleSubclassMap ( ) ) ;
235
+
236
+ var classMapping = model . BuildMappings ( ) ;
237
+ classMapping . Count ( ) . ShouldEqual ( 1 ) ;
238
+
239
+ var top = classMapping . First ( ) . Classes . First ( ) ;
240
+ top . Subclasses . Count ( ) . ShouldEqual ( 2 ) ;
241
+
242
+ var middle = top . Subclasses . SingleOrDefault ( sc => sc . Type == typeof ( TablePerTypeWithInterfaces . TPTWI_IMiddle ) ) ;
243
+ middle . ShouldNotBeNull ( ) ;
244
+ middle . Subclasses . Count ( ) . ShouldEqual ( 1 ) ;
245
+ }
206
246
}
207
247
208
248
namespace Thoughts
@@ -365,6 +405,124 @@ public class I_BottomMostMap : SubclassMap<I_BottomMost>
365
405
{ }
366
406
}
367
407
408
+ namespace TablePerType
409
+ {
410
+ public class TPT_Top
411
+ {
412
+ public virtual int Id { get ; protected set ; }
413
+ }
414
+ public class TPT_Middle
415
+ : TPT_Top
416
+ {
417
+ public virtual string MiddleProperty { get ; set ; }
418
+ }
419
+ public class TPT_TopSubclass
420
+ : TPT_Top
421
+ {
422
+ }
423
+ public class TPT_MiddleSubclass
424
+ : TPT_Middle
425
+ {
426
+ public virtual string OwnProperty { get ; set ; }
427
+ }
428
+
429
+ public class TPT_TopMap
430
+ : ClassMap < TPT_Top >
431
+ {
432
+ public TPT_TopMap ( )
433
+ {
434
+ Id ( x => x . Id ) ;
435
+ }
436
+ }
437
+ public class TPT_TopSubclassMap
438
+ : SubclassMap < TPT_TopSubclass >
439
+ {
440
+ public TPT_TopSubclassMap ( )
441
+ {
442
+ KeyColumn ( "Id" ) ;
443
+ }
444
+ }
445
+ public class TPT_MiddleMap
446
+ : SubclassMap < TPT_Middle >
447
+ {
448
+ public TPT_MiddleMap ( )
449
+ {
450
+ KeyColumn ( "Id" ) ;
451
+ Map ( x => x . MiddleProperty ) ;
452
+ }
453
+ }
454
+ public class TPT_MiddleSubclassMap
455
+ : SubclassMap < TPT_MiddleSubclass >
456
+ {
457
+ public TPT_MiddleSubclassMap ( )
458
+ {
459
+ KeyColumn ( "Id" ) ;
460
+ Map ( x => x . OwnProperty ) ;
461
+ }
462
+ }
463
+ }
464
+
465
+ namespace TablePerTypeWithInterfaces
466
+ {
467
+ public interface TPTWI_ITop
468
+ {
469
+ int Id { get ; }
470
+ }
471
+ public interface TPTWI_IMiddle
472
+ : TPTWI_ITop
473
+ {
474
+ string MiddleProperty { get ; set ; }
475
+ }
476
+
477
+ public class TPTWI_TopSubclass
478
+ : TPTWI_ITop
479
+ {
480
+ public virtual int Id { get ; protected set ; }
481
+ }
482
+ public class TPTWI_MiddleSubclass
483
+ : TPTWI_TopSubclass , TPTWI_IMiddle
484
+ {
485
+ public virtual string MiddleProperty { get ; set ; }
486
+ public virtual string OwnProperty { get ; set ; }
487
+ }
488
+
489
+ public class TPTWI_ITopMap
490
+ : ClassMap < TPTWI_ITop >
491
+ {
492
+ public TPTWI_ITopMap ( )
493
+ {
494
+ Id ( x => x . Id ) ;
495
+ }
496
+ }
497
+ public class TPTWI_TopSubclassMap
498
+ : SubclassMap < TPTWI_TopSubclass >
499
+ {
500
+ public TPTWI_TopSubclassMap ( )
501
+ {
502
+ Extends < TPTWI_ITop > ( ) ;
503
+ KeyColumn ( "Id" ) ;
504
+ }
505
+ }
506
+ public class TPTWI_IMiddleMap
507
+ : SubclassMap < TPTWI_IMiddle >
508
+ {
509
+ public TPTWI_IMiddleMap ( )
510
+ {
511
+ KeyColumn ( "Id" ) ;
512
+ Map ( x => x . MiddleProperty ) ;
513
+ }
514
+ }
515
+ public class TPTWI_MiddleSubclassMap
516
+ : SubclassMap < TPTWI_MiddleSubclass >
517
+ {
518
+ public TPTWI_MiddleSubclassMap ( )
519
+ {
520
+ KeyColumn ( "Id" ) ;
521
+ Map ( x => x . OwnProperty ) ;
522
+ }
523
+ }
524
+ }
525
+
368
526
namespace Branching
369
527
{
370
528
public class B_Top
0 commit comments