private static TableGenerator CastToTableGenerator <T>(INHibernateIdGenerator <T> generator)
        {
            TableGenerator result;
            var            nhibernateAdaptor = generator as IdGeneratorNHibernateAdaptor <T>;

            if (nhibernateAdaptor != null)
            {
                result = nhibernateAdaptor.Implementation as TableGenerator;
            }
            else
            {
                result = generator as TableGenerator;
            }

            return(result);
        }
        /// <summary>
        /// Create the table for the <paramref name="generator"/> supplied.
        /// </summary>
        /// <remarks>
        /// This method is only relevant for generator's that are backed by a table
        /// </remarks>
        public static void CreateTableFor <T>(INHibernateIdGenerator <T> generator,
                                              IDbConnection openConnection,
                                              Dialect dialect)
        {
            Check.Require(() => {
                Demand.The.Param(() => generator).IsNotNull();
                Demand.The.Param(() => openConnection).IsNotNull().IsOpen();
            });

            TableGenerator gen = CastToTableGenerator(generator);

            if (gen == null)
            {
                throw new ArgumentException("Generator does not support a backing store", "generator");
            }

            var dropTableSql = gen.SqlDropString(dialect).Join("\n");

            SimpleDataAccess.ExecuteSql(dropTableSql, openConnection);

            var createIdTableSql = gen.SqlCreateStrings(dialect).Join("\n");

            SimpleDataAccess.ExecuteSql(createIdTableSql, openConnection);
        }
 /// <summary>
 /// Create the table for the <paramref name="generator"/> supplied.
 /// </summary>
 /// <remarks>
 /// This method is only relevant for generator's that are backed by a table
 /// </remarks>
 public static void CreateTableFor <T>(INHibernateIdGenerator <T> generator, IDbConnection openConnection)
 {
     CreateTableFor(generator, openConnection, new MsSql2005Dialect());
 }