Мы столкнулись с очень сложной проблемой в нашем производственном приложении.
У нас есть метод WCF, который создает сложную сущность в базе данных со всеми ее связями.
public void InsertEntity(Entity entity)
{
using(TransactionScope scope = new TransactionScope())
{
EntityDao.Create(entity);
}
}
Метод EntityDao.Create (entity) очень сложен и содержит огромные кусочки логики. В течение всего процесса создания он создает несколько дочерних объектов, а также имеет несколько запросов к базе данных.
В течение всего запроса WCF о создании объекта обычно Connection поддерживается в переменной ThreadStatic и повторно используется DAO. Хотя некоторые из запросов в DAO, описанных в шаге 2, используют новое соединение и закрывают его после использования.
В целом мы видели, что описанное выше поведение процесса является непредсказуемым. Некоторые из запросов во внутреннем DAO даже не возвращают фактические данные из базы данных? Тот же запрос при запуске в хранилище данных Actaul дает правильный результат.
Какая может быть возможная причина такого поведения?