protected virtual void GetData(Dictionary <int, ContentModification> newValues) { // при возникновении исключения в базе, даже если его перехватить // родительская транзакция все равно откатывается, и дальнейшая работа с базой будет вызывать ошибки. // чтобы этого не было, выполняем код вне родительской транзакции (TransactionScopeOption.Suppress). using (var tsSuppressed = new TransactionScope(TransactionScopeOption.Suppress)) { if (newValues == null) { throw new ArgumentNullException(nameof(newValues)); } using (SqlConnection con = new SqlConnection(_connectionString)) { using (SqlCommand cmd = new SqlCommand(_cmdText, con)) { cmd.CommandType = CommandType.Text; con.Open(); try { // производим запрос - без этого не будет работать dependency using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var item = new ContentModification { ContentId = Convert.ToInt32(reader["CONTENT_ID"]), LiveModified = Convert.ToDateTime(reader["LIVE_MODIFIED"]), StageModified = Convert.ToDateTime(reader["STAGE_MODIFIED"]) }; newValues[item.ContentId] = item; } } } finally { con.Close(); } } } tsSuppressed.Complete(); } }
protected override void GetData(Dictionary <int, ContentModification> newValues) { DatabaseType dbType = (DatabaseType)Enum.Parse(typeof(DatabaseType), DbType); DbConnection connection = dbType == DatabaseType.SqlServer ? (DbConnection) new SqlConnection(ConnectionString) : new NpgsqlConnection(ConnectionString); using (connection) { string query = GetCmdText(dbType); DbCommand cmd = dbType == DatabaseType.SqlServer ? (DbCommand) new SqlCommand(query) : new NpgsqlCommand(query); cmd.Connection = connection; using (cmd) { cmd.CommandType = CommandType.Text; if (connection.State != ConnectionState.Open) { connection.Open(); } // производим запрос - без этого не будет работать dependency using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var item = new ContentModification { ContentId = Convert.ToInt32(reader["CONTENT_ID"]), LiveModified = Convert.ToDateTime(reader["LIVE_MODIFIED"]), StageModified = Convert.ToDateTime(reader["STAGE_MODIFIED"]) }; newValues[item.ContentId] = item; } } } } }
protected override void GetData(Dictionary <int, ContentModification> newValues) { Enum.TryParse <DatabaseType>(DbType, out var dbType); using (var cs = new QPConnectionScope(ConnectionString, dbType)) { var con = cs.DbConnection; string query = string.Format(_cmdText, SqlQuerySyntaxHelper.WithNoLock(dbType)); DbCommand cmd = dbType == DatabaseType.SqlServer ? (DbCommand) new SqlCommand(query) : new NpgsqlCommand(query); using (cmd) { cmd.CommandType = CommandType.Text; if (con.State != ConnectionState.Open) { con.Open(); } // производим запрос - без этого не будет работать dependency using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { var item = new ContentModification { ContentId = Convert.ToInt32(reader["CONTENT_ID"]), LiveModified = Convert.ToDateTime(reader["LIVE_MODIFIED"]), StageModified = Convert.ToDateTime(reader["STAGE_MODIFIED"]) }; newValues[item.ContentId] = item; } } } } //tsSuppressed.Complete(); }