コード例 #1
0
ファイル: UnitOfWork.cs プロジェクト: lstern/practices
 /// <summary>
 /// Initializes a new instance of the <see cref="UnitOfWork"/> class. 
 /// Inicia uma unidade de trabalho de persistência. Somente chamar dentro de using().
 /// </summary>
 public UnitOfWork()
 {
     uow = this;
 }
コード例 #2
0
ファイル: UnitOfWork.cs プロジェクト: lstern/practices
        /// <summary>
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// </summary>
        /// <filterpriority>2</filterpriority>
        public void Dispose()
        {
            // Se não fizemos commit da unidade de trabalho damos rollback
            if (!this.committed)
            {
                if (this.OnRollback != null)
                {
                    this.OnRollback();
                }
                else
                {
                    // A perda de dados só ocorre se registramos um datacontext, que irá escutar o OnConsolidate.
                    if (!TestMode && !ReadOnlyContext.InProgress && this.OnConsolidate != null)
                    {
                        throw new Exception(
                            "Unidade de trabalho foi eliminada sem commit e não há handlers de Rollback. Possível perda de dados iminente.");
                    }
                }
            }

            uow = null;
            if (this.OnDispose != null)
            {
                this.OnDispose();
            }
            else
            {
                // A inconsistencia no tratamento de unidades de trabalho só ocorre se registramos um datacontext, que irá escutar o OnConsolidate.
                if (!TestMode && !ReadOnlyContext.InProgress && this.OnConsolidate != null)
                {
                    throw new Exception(
                        "Unidade de trabalho foi eliminada mas não há handlers de Dispose. Possível inconsistência no tratamento de futuras unidades de trabalho nesta mesma Thread.");
                }
            }
        }