Skip to content

Commit 2f1b5fe

Browse files
committed
Test exposing null-reference exceptions caused by mapped interface types for table-per-type hierarchies
1 parent 4421b05 commit 2f1b5fe

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

src/FluentNHibernate.Testing/PersistenceModelTests/SubclassPersistenceModelTests.cs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,18 @@ public void ShouldHandleEverettsWeirdMapping()
203203
colorSource.Subclasses.ShouldContain(x => x.Type == typeof(Sauces.ReallyHotSauce));
204204
colorSource.Subclasses.Count().ShouldEqual(2);
205205
}
206+
207+
[Test]
208+
public void CanBuildConfigurationForTablePerTypeWithInterfaces()
209+
{
210+
var model = new PersistenceModel();
211+
model.Add(new TablePerTypeWithInterfaces.TPTWI_ITopMap());
212+
model.Add(new TablePerTypeWithInterfaces.TPTWI_TopSubclassMap());
213+
model.Add(new TablePerTypeWithInterfaces.TPTWI_IMiddleMap());
214+
model.Add(new TablePerTypeWithInterfaces.TPTWI_MiddleSubclassMap());
215+
216+
model.BuildMappings();
217+
}
206218
}
207219

208220
namespace Thoughts
@@ -365,6 +377,66 @@ public class I_BottomMostMap : SubclassMap<I_BottomMost>
365377
{ }
366378
}
367379

380+
381+
namespace TablePerTypeWithInterfaces
382+
{
383+
public interface TPTWI_ITop
384+
{
385+
int Id { get; }
386+
}
387+
public interface TPTWI_IMiddle
388+
: TPTWI_ITop
389+
{
390+
string MiddleProperty { get; set; }
391+
}
392+
393+
public class TPTWI_TopSubclass
394+
: TPTWI_ITop
395+
{
396+
public virtual int Id { get; protected set; }
397+
}
398+
public class TPTWI_MiddleSubclass
399+
: TPTWI_TopSubclass, TPTWI_IMiddle
400+
{
401+
public virtual string MiddleProperty { get; set; }
402+
public virtual string OwnProperty { get; set; }
403+
}
404+
405+
public class TPTWI_ITopMap
406+
: ClassMap<TPTWI_ITop>
407+
{
408+
public TPTWI_ITopMap()
409+
{
410+
Id(x => x.Id);
411+
}
412+
}
413+
public class TPTWI_TopSubclassMap
414+
: SubclassMap<TPTWI_TopSubclass>
415+
{
416+
public TPTWI_TopSubclassMap()
417+
{
418+
KeyColumn("Id");
419+
}
420+
}
421+
public class TPTWI_IMiddleMap
422+
: SubclassMap<TPTWI_IMiddle>
423+
{
424+
public TPTWI_IMiddleMap()
425+
{
426+
KeyColumn("Id");
427+
Map(x => x.MiddleProperty);
428+
}
429+
}
430+
public class TPTWI_MiddleSubclassMap
431+
: SubclassMap<TPTWI_MiddleSubclass>
432+
{
433+
public TPTWI_MiddleSubclassMap()
434+
{
435+
KeyColumn("Id");
436+
Map(x => x.OwnProperty);
437+
}
438+
}
439+
}
368440
namespace Branching
369441
{
370442
public class B_Top

0 commit comments

Comments
 (0)