Ваша проблема связана с типом static
, который требует новой инициализации каждый раз, когда цикл повторяется. Если вы находитесь в цикле, лучше сохранить конкретную инициализацию внутри цикла.
List<Object> objects = new ArrayList<>();
for (int i = 0; i < length_you_want; i++) {
SomeStaticClass myStaticObject = new SomeStaticClass();
myStaticObject.tag = i;
// Do stuff with myStaticObject
objects.add(myStaticClass);
}
Вместо:
List<Object> objects = new ArrayList<>();
SomeStaticClass myStaticObject = new SomeStaticClass();
for (int i = 0; i < length; i++) {
myStaticObject.tag = i;
// Do stuff with myStaticObject
objects.add(myStaticClass);
// This will duplicate the last item "length" times
}
Здесь tag
является переменной в SomeStaticClass
проверить правильность приведенного выше фрагмента; у вас может быть другая реализация, основанная на вашем случае использования.
Я не думаю, что Ваша проблема имеет какое-либо отношение к понятию TransactionScope.NET. Скорее это кажется на описание ожидаемого поведения транзакций SQL Server. Кроме того, изменение уровня изоляции только влияет "на чтения данных" не "записи данных". От SQL Server BOL:
"Выбор уровня изоляции транзакции не влияет на блокировки, полученные для защиты модификаций данных. Транзакция всегда получает монопольную блокировку на любых данных, которые она изменяет и содержит ту блокировку, пока транзакция не завершается, независимо от набора уровня изоляции для той транзакции. Для операций чтения уровни изоляции транзакции, прежде всего, определяют уровень защиты от эффектов модификаций, сделанных другими транзакциями".
То, что это означает, - то, что можно предотвратить блокирующееся поведение путем изменения уровня изоляции для клиента, выходящего SELECT
оператор (операторы). READ COMMITED
уровень изоляции (значение по умолчанию) не предотвратит блокирование. Для предотвращения блокирования клиента Вы использовали бы READ UNCOMMITTED
уровень изоляции, но необходимо было бы объяснить возможность, что записи могут быть получены, которые были обновлены/вставлены открытой транзакцией (т.е. они могли бы уйти, если транзакция откатывает).