У нас есть эта огромная устаревшая система. Есть ошибка, которая существует уже некоторое время, когда 1 из 10000 запросов, метод, который должен возвращать очень хорошо известный идентификатор из очень маленькой таблицы (10 строк), возвращает «сумасшедшее» значение, которое, к нашему удивлению, почти всегда идентификатор другой таблицы вашей системы. Этот метод выполняет только простой запрос SELECT к базе данных.
Мы заметили, что есть два класса (один из которых относится к месту, где может быть ошибка), которые используют статический член для соединения с базой данных:
public class Accounts
{
private static Database db;
private static Database DB
{
get
{
if (db == null)
{
db = DatabaseFactory.CreateDatabase();
}
return db;
}
}
...
}
Это опасно? Мы не уверены, что это может привести к проблемам с безопасностью потоков, как, например, ошибка, о которой мы упоминали ранее, которая очень похожа на ошибку синхронизации.