public void Mapping( IMapping mapping )
        {
            mapping.Table<Product>( 1 );
            mapping.Table<ProductRating>( 3 );

            mapping.PropertyMap<RootTable, int>( x => x.Size, record => record.GetInt32( 1 ) * 2 );
            mapping.PropertyMap<RootTable, TransactionManager>( x => x.TransactionManager, reader => null );
            mapping.PropertyMap<RootTable, DateTime>( x => x.DueDate, ( record ) => record.GetValue( 2 ) == DBNull.Value ? default( DateTime ) : record.GetDateTime( 2 ) );
            mapping.TableJoin<Product, ProductRating>( ( product, rating ) => product.Id == rating.ProductId, ( product, list ) => product.ProductRatings = list );
            mapping.Join<RootTable, Product>( ( x, y ) => x.Products = y );
            mapping.AddJoin( x => x.DictionaryTableJoin<Product>()
                .Condition( ( product, o ) => product.Id == o.ProductId )
                .KeyColumn( "Id" )
                .ValueColumn( "Quantity" )
                .SetDestinationProperty<int, int>( ( product, values ) => product.Stock = values )
                .ChildTable( 2 ) );
        }