private void CheckConcurrencyControl(VerificationStage verificationStage) { if (_busObj.Status.IsNew) { return; //If the object is new there cannot be a concurrency error. } IDatabaseConnection connection = DatabaseConnection.CurrentConnection; if (connection == null) { return; } if (!(BORegistry.DataAccessor.BusinessObjectLoader is BusinessObjectLoaderDB)) { return; } var statement = GetSelectSQLStatement(); using (IDataReader dr = connection.LoadDataReader(statement)) { // If this object no longer exists in the database // then we have a concurrency conflict since it has been deleted by another process. // If our objective was to delete it as well then no worries else throw error. var drHasData = dr.Read(); if (!(drHasData) && !_busObj.Status.IsDeleted) { //The object you are trying to update has been deleted by another user. throw new BusObjDeleteConcurrencyControlException(_busObj.ClassDef.ClassName, _busObj.ID.ToString(), _busObj); } var versionNumberBusinessObject = (int)_versionNumber.Value; var versionNumberDB = (int)dr[_versionNumber.DatabaseFieldName]; if (versionNumberDB == versionNumberBusinessObject) { return; } var dateLastUpdatedInDB = dr[_dateLastUpdated.DatabaseFieldName].ToString(); var userNameLastUpdated = (string)dr[_userLastUpdated.DatabaseFieldName]; var machineLastUpdated = (string)dr[_machineLastUpdated.DatabaseFieldName]; ThrowConcurrencyException(verificationStage, userNameLastUpdated, machineLastUpdated, dateLastUpdatedInDB); } }
private void ThrowConcurrencyException(VerificationStage verificationStage, string userNameLastUpdated, string machineLastUpdated, string dateLastUpdatedInDB) { if (verificationStage == VerificationStage.BeforeBeginEdit) { throw new BusObjBeginEditConcurrencyControlException(_busObj.ClassDef.ClassName, userNameLastUpdated, machineLastUpdated, DateTime.Parse(dateLastUpdatedInDB), _busObj.ID.ToString(), _busObj); } throw new BusObjOptimisticConcurrencyControlException(_busObj.ClassDef.ClassName, userNameLastUpdated, machineLastUpdated, DateTime.Parse(dateLastUpdatedInDB), _busObj.ID.ToString(), _busObj); }
private void CheckConcurrencyControl(VerificationStage verificationStage) { if (_busObj.Status.IsNew) return; //If the object is new there cannot be a concurrency error. IDatabaseConnection connection = DatabaseConnection.CurrentConnection; if (connection == null) return; if (!(BORegistry.DataAccessor.BusinessObjectLoader is BusinessObjectLoaderDB)) return; var statement = GetSelectSQLStatement(); using (IDataReader dr = connection.LoadDataReader(statement)) { // If this object no longer exists in the database // then we have a concurrency conflict since it has been deleted by another process. // If our objective was to delete it as well then no worries else throw error. var drHasData = dr.Read(); if (!(drHasData) && !_busObj.Status.IsDeleted) { //The object you are trying to update has been deleted by another user. throw new BusObjDeleteConcurrencyControlException(_busObj.ClassDef.ClassName, _busObj.ID.ToString(), _busObj); } var versionNumberBusinessObject = (int) _versionNumber.Value; var versionNumberDB = (int) dr[_versionNumber.DatabaseFieldName]; if (versionNumberDB == versionNumberBusinessObject) return; var dateLastUpdatedInDB = dr[_dateLastUpdated.DatabaseFieldName].ToString(); var userNameLastUpdated = (string) dr[_userLastUpdated.DatabaseFieldName]; var machineLastUpdated = (string) dr[_machineLastUpdated.DatabaseFieldName]; ThrowConcurrencyException(verificationStage, userNameLastUpdated, machineLastUpdated, dateLastUpdatedInDB); } }