Quantcast
Channel: CSLA .NET
Viewing all articles
Browse latest Browse all 764

Transaction on multiple oracle databases

$
0
0

Hello

I would like to know how to use TransactionManager to manage a transaction on multiple oracle databases.I use TransactionManager for Root/Child transactions but on the same database, below is an example.

I don´t know how to set a TransactionManager that hold different connections object and that is able to commit or rollback the complete transaction. I think i have to use a UoW object but i don't how to wrap the complete process with one TransactionManager object.

Any help will be appreciated, thank in advance, Esteban

protected override void DataPortal_Update()
        {
            bool cancel = false;
            OnBeforeUpdate(ref cancel, this);
            if (cancel) return;
           
            RetailDto resultRetailDto = null;
           
         using (var ctx = DalFactory.GetManager())
         {
          var dal = ctx.GetProvider<IRetailDal>();
               
                using (var ctxConn = TransactionManager<OracleConnection, OracleTransaction>.GetManager(this.BreintekManager.ConnectStringDB, false, this.BreintekManager.DBConnId.ToString()))
                {
                    Csla.ApplicationContext.LocalContext[this.BreintekManager.DBConnId.ToString()] = "TransacOK";
          
                    using (BypassPropertyChecks)
                    {
                        RetailDto retailDto = new RetailDto(this.BreintekManager.CodigoAccesoSistema, this.BreintekManager.Usuario)
                        {
                            RetailId = this.RetailId,
                            ....
                        };
                       
                        retailDto.BreintekManager = this.BreintekManager;
                        retailDto.BreintekManager.AccionDB = BreintekAccionesDB.Update;                       
                       
                        retailDto.BreintekManager.EsTransaccion = true;
                       
                  resultRetailDto = dal.Update(retailDto);
                   
                        OnAfterUpdate(ref resultRetailDto);
                       
                        if(resultRetailDto.BreintekManager.TieneError)
                        {
                            if(resultRetailDto.BreintekManager.EsTransaccion)
                            {
                                var dalTrx = ctx.GetProvider<IManejoTransaccion>();
                                dalTrx.EjecutaTransaccion(resultRetailDto.BreintekManager, AdministraError.ListaErrorTrx);
                            }
                           
                            this.BreintekManager = resultRetailDto.BreintekManager;
                            ApplicationContext.LocalContext.Remove(this.BreintekManager.DBConnId.ToString());
                            return;
                        }
                    }
                   
                    cancel = false;
                    OnBeforeUpdateChild(ref cancel,  ref resultRetailDto);
                    if (cancel) return;

                    FieldManager.UpdateChildren(this);
                   
                    OnAfterUpdateChild(this, ref resultRetailDto);
               
                    if  ((!this.BreintekManager.TieneError) && (Csla.ApplicationContext.LocalContext[this.BreintekManager.DBConnId.ToString()].ToString() == "TransacOK"))
                    {
                        this.BreintekManager.Status = 1;
                        this.BreintekManager.OpcionDB = 0;
                        ctxConn.Commit();
                    }
                    else
                    {
                        this.BreintekManager.Status = -1;
                        this.BreintekManager.StatusMessage = String.Format("Se produjeron errores en objetos hijos.{0}{1}", Environment.NewLine, this.BreintekManager.StatusMessage);
                    }

                    ApplicationContext.LocalContext.Remove(this.BreintekManager.DBConnId.ToString());               
                }
            }
        }

 

 

 

 

 


Viewing all articles
Browse latest Browse all 764

Trending Articles