I figured out what this was.
In my HBM mapping files I had a lot of references back to this class as follows:
Well it turns out higher up was actually pointing me in the general direction of the issue:
Test 'ItemBank.UnitTests.ExamTypeTests.Create' failed: NHibernate.PropertyValueException : not-null property references a null or transient value ItemBank.BusinessObjects.ExamType._ItemBank.BusinessObjects.Item.ExamTypesBackref
at NHibernate.Engine.Nullability.CheckNullability(Object[] values, IEntityPersister persister, Boolean isUpdate)
at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.Save(Object obj)
C:\Visual Studio Projects\NHibernate Class Library\ARRT.NH\Data\NHibernateRepository.cs(76,0): at ARRT.NH.Data.NHibernate.NHibernateRepositoryWithTypedId`2.Save(T entity)
UnitTests\ExamTypeTests.cs(61,0): at ItemBank.UnitTests.ExamTypeTests.Create()
That not-null property was what was causing the issue. If I go and look at the class in question ("Item") I seen the following:
<bag name="ExamTypes" lazy="true" cascade="none">
<!--property-ref is refering to this objects type column, if we omit this it defaults to the Id property which is the RecordID which
is not what we want. Removed not-null="true" as I was getting not-null property references a null or transient value error-->
<key column="Type" property-ref="Type" not-null="true" on-delete="noaction" update="false"></key>
<one-to-many class="ExamType" />
</bag>
After removing the not-null="true" on the above statement it worked just fine.