public static int InsertFromQuery <T>(this IQueryable <T> querable, string tableName, Expression <Func <T, object> > insertObjectExpression, BulkInsertOptions <T> options)
        {
            int rowAffected  = 0;
            var dbQuery      = querable as DbQuery <T>;
            var dbConnection = GetSqlConnectionFromIQuerable(querable);

            //Open datbase connection
            if (dbConnection.State == ConnectionState.Closed)
            {
                dbConnection.Open();
            }

            using (var dbTransaction = dbConnection.BeginTransaction())
            {
                try
                {
                    var sqlQuery = SqlQuery.Parse(dbQuery.Sql);
                    if (SqlUtil.TableExists(tableName, dbConnection, dbTransaction))
                    {
                        sqlQuery.ChangeToInsert(tableName, insertObjectExpression);
                        if (options.KeepIdentity)
                        {
                            SqlUtil.ToggleIdentityInsert(true, tableName, dbConnection, dbTransaction);
                        }
                        rowAffected = SqlUtil.ExecuteSql(sqlQuery.Sql, dbConnection, dbTransaction, options);
                        if (options.KeepIdentity)
                        {
                            SqlUtil.ToggleIdentityInsert(false, tableName, dbConnection, dbTransaction);
                        }
                    }
                    else
                    {
                        sqlQuery.Clauses.First().InputText += string.Format(" INTO {0}", tableName);
                        rowAffected = SqlUtil.ExecuteSql(sqlQuery.Sql, dbConnection, dbTransaction, options);
                    }

                    dbTransaction.Commit();
                }
                catch (Exception ex)
                {
                    dbTransaction.Rollback();
                    throw ex;
                }
                finally
                {
                    dbConnection.Close();
                }
            }
            return(rowAffected);
        }
        public static bool TableExists(this Database database, string tableName)
        {
            var dbConnection = database.Connection as SqlConnection;

            return(SqlUtil.TableExists(tableName, dbConnection, null));
        }