public async Task InsertMultipleObjectsWithCascade()
        {
            var TestObject = Canister.Builder.Bootstrapper.Resolve <ISession>();

            await SetupDataAsync().ConfigureAwait(false);

            var Result1 = new MapPropertiesWithBaseClasses
            {
                BoolValue   = false,
                MappedClass = new MapProperty1
                {
                    BaseValue1  = 1,
                    ChildValue1 = 1
                }
            };
            var Result2 = new MapPropertiesWithBaseClasses
            {
                BoolValue   = true,
                MappedClass = new MapProperty2
                {
                    BaseValue1  = 2,
                    ChildValue2 = 2
                }
            };
            var Result3 = new MapPropertiesWithBaseClasses
            {
                BoolValue   = false,
                MappedClass = new MapProperty1
                {
                    BaseValue1  = 3,
                    ChildValue1 = 3
                }
            };
            await TestObject.Save(Result1, Result2, Result3).ExecuteAsync().ConfigureAwait(false);

            var Results = await TestObject.ExecuteAsync <MapPropertiesWithBaseClasses>("SELECT ID_ as [ID], BoolValue_ as [BoolValue] FROM MapPropertiesWithBaseClasses_", CommandType.Text, "Default").ConfigureAwait(false);

            Assert.Equal(6, Results.Count());
            Assert.Contains(Results, x => x.ID == Result1.ID &&
                            !x.BoolValue &&
                            x.MappedClass.BaseValue1 == 1 &&
                            ((MapProperty1)x.MappedClass).ChildValue1 == 1);
            Assert.Contains(Results, x => x.ID == Result2.ID &&
                            x.BoolValue &&
                            x.MappedClass.BaseValue1 == 2 &&
                            ((MapProperty2)x.MappedClass).ChildValue2 == 2);
            Assert.Contains(Results, x => x.ID == Result3.ID &&
                            !x.BoolValue &&
                            x.MappedClass.BaseValue1 == 3 &&
                            ((MapProperty1)x.MappedClass).ChildValue1 == 3);
        }
        private async Task SetupDataAsync()
        {
            var TestObject = new SchemaManager(MappingManager, Configuration, Logger, DataModeler, Sherlock, Helper);
            var Session    = Canister.Builder.Bootstrapper.Resolve <ISession>();
            await Helper
            .CreateBatch()
            .AddQuery(CommandType.Text, "DELETE FROM MapPropertiesWithBaseClasses_")
            .AddQuery(CommandType.Text, "DELETE FROM MapProperty1_")
            .ExecuteScalarAsync <int>().ConfigureAwait(false);

            var InitialData = new MapPropertiesWithBaseClasses[]
            {
                new MapPropertiesWithBaseClasses
                {
                    BoolValue   = true,
                    MappedClass = new MapProperty1
                    {
                        BaseValue1  = 1,
                        ChildValue1 = 2
                    }
                },
                new MapPropertiesWithBaseClasses
                {
                    BoolValue   = false,
                    MappedClass = new MapProperty1
                    {
                        BaseValue1  = 1,
                        ChildValue1 = 2
                    }
                },
                new MapPropertiesWithBaseClasses
                {
                    BoolValue   = true,
                    MappedClass = new MapProperty1
                    {
                        BaseValue1  = 1,
                        ChildValue1 = 2
                    }
                },
            };

            await Session.Save(InitialData.Select(x => x.MappedClass).ToArray()).ExecuteAsync().ConfigureAwait(false);

            await Session.Save(InitialData).ExecuteAsync().ConfigureAwait(false);
        }