У меня есть приложение ASP.NET MVC с LinqToSql. Слой данных содержит методы для выполнения грубых операций с базой данных. Каждый метод может запросить текстовый констант данных из Structuremap, который настроен на возврат одного и того же текстового контекста на запрос http (InstanceScope.Hybrid), поэтому я могу вызвать несколько методов на уровне данных, и, в конце концов, вызывается submitchanges, поэтому все операции crud выполняются. содержится в одной транзакции. Пока это работает нормально.
У меня также есть действия рабочего процесса (с использованием WF4), которые, конечно, выполняются в отдельном потоке, потоке рабочего процесса. Некоторые действия также выполняют операции crud, используя один и тот же слой данных. Проблема заключается в том, что структура карты (иногда) возвращает один и тот же текст данных для разных действий, возможно потому, что эти действия выполняются в одном потоке рабочего процесса. Это вызывает проблемы, потому что текст данных может кэшировать экземпляры сущностей, которые были изменены между выполнением двух действий (потому что данные были изменены из веб-приложения).
Например.
Activity1
- вызывает метод A на уровне данных => метод A запрашивает текстовый текст данных из структуры map => возвращается текстовый текст X1
- вызывает метод B на уровне данных => метод B запрашивает текст данных из структуры map =>
datacontext X1 возвращается
- вызовы отправителя, A и B совершены
Веб-приложение
- вызывает метод B на уровне данных => метод B запрашивает текстовый текст данных из структуры map => возвращается текстовый текст X2
- звонки отправляют, B совершено
Занятие 2
- вызывает метод B на уровне данных => метод B запрашивает текстовый текст данных из структуры map => datacontext X1 возвращается (=> здесь мне нужен еще один текстовый текст).
Datacontext X1 кэширует экземпляры сущностей, веб-приложение изменило сущность между ними, поэтому я получаю исключение changeconflict
Из веб-приложения гибридный экземпляр структуры карты в порядке, потому что каждый веб-запрос дает мне другой экземпляр datacontext, из WF это не нормально ... Я не могу настроить структурную карту в WF так, чтобы он возвращал экземпляр для запроса, потому что это дало бы мне разные точки данных в методе A и методе B ... поэтому A и B не будут содержаться в одной транзакции.
Может быть, если бы я мог сказать, что structmap удаляет текст данных, всякий раз, когда вызывается submitchanges, это решило бы мою проблему, но я не знаю, можно ли или как это можно сделать с помощью структуры структуры.