/// <summary>
 /// Registra as informações do usuário na transação do storedprocedure.
 /// </summary>
 /// <param name="transaction"></param>
 protected override void RegisterUserInfo(IStoredProcedureTransaction transaction)
 {
     if (!Colosoft.Security.UserContext.UserProcessing)
     {
         var profile = ProfileManager.CurrentProfileInfo;
         var user    = Colosoft.Security.UserContext.Current.User;
         if (profile != null && user != null)
         {
             var query      = "CREATE TABLE #UserInfo (ProfileId int, UserId int)";
             var parameters = new GDAParameter[] {
                 new GDAParameter("?profileId", profile.ProfileId),
                 new GDAParameter("?userKey", int.Parse(user.UserKey))
             };
             var session = ((GDAStoredProcedureTransaction)transaction).Session;
             var da      = new DataAccess(session.ProviderConfiguration);
             var r1      = da.ExecuteCommand(session, query);
             var query1  = "INSERT INTO #UserInfo(ProfileId, UserId) VALUES(?profileId, ?userKey)";
             da.ExecuteCommand(session, query1, parameters);
         }
     }
 }
        /// <summary>
        /// Executa as várias consultas.
        /// </summary>
        /// <param name="queries"></param>
        /// <returns></returns>
        public override IEnumerable <IQueryResult> Execute(QueryInfo[] queries)
        {
            queries.Require("queries").NotNull();
            var result = new IQueryResult[queries.Length];
            Dictionary <QueryExecutionGroup, IList <int> > providerDictionary = new Dictionary <QueryExecutionGroup, IList <int> >(QueryExecutionGroup.Comparer);

            for (int i = 0; i < queries.Length; i++)
            {
                string      providerName = ProviderLocator.GetProviderName(queries[i]);
                var         group        = new QueryExecutionGroup(providerName, queries[i].IsolationLevel);
                IList <int> indexes;
                if (providerDictionary.TryGetValue(group, out indexes))
                {
                    indexes.Add(i);
                }
                else
                {
                    indexes = new List <int>();
                    indexes.Add(i);
                    providerDictionary.Add(group, indexes);
                }
            }
            IStoredProcedureTransaction storedProcedureTransaction = null;

            foreach (var provider in providerDictionary)
            {
                using (var session = CreateSession(provider.Key))
                {
                    RegisterSession(session);
                    foreach (var index in provider.Value)
                    {
                        IQueryResult queryResult = null;
                        try
                        {
                            if (queries[index].StoredProcedureName == null)
                            {
                                SqlQueryParser parser      = CreateParser(queries[index]);
                                string         queryString = parser.GetText();
                                try
                                {
                                    queryResult = ExecuteQuery(session, queryString, queries[index]);
                                }
                                catch (GDAException ex)
                                {
                                    throw new GDAException(string.Format("{0}. Query: {1}", ex.Message, queries[index].ToString()), ex.InnerException);
                                }
                            }
                            else
                            {
                                if (storedProcedureTransaction == null)
                                {
                                    storedProcedureTransaction = new GDAStoredProcedureTransaction(session, provider.Key.ProviderName);
                                    if (!queries[index].IgnoreRegisterUserInfo)
                                    {
                                        RegisterUserInfo(storedProcedureTransaction);
                                    }
                                }
                                queryResult = ExecuteStoredProcedure(session, queries[index]);
                            }
                        }
                        catch
                        {
                            if (session is GDATransaction)
                            {
                                ((GDATransaction)session).Rollback();
                            }
                            throw;
                        }
                        yield return(queryResult);
                    }
                    if (session is GDATransaction)
                    {
                        ((GDATransaction)session).Commit();
                    }
                }
            }
        }
 protected override void RegisterUserInfo(IStoredProcedureTransaction a)
 {
 }
 /// <summary>
 /// Registra as informações do usuário no banco de dados.
 /// </summary>
 /// <param name="transaction">Transação que será utilizada na operação.</param>
 protected abstract void RegisterUserInfo(IStoredProcedureTransaction transaction);