Проблема со структурой map для создания текстового текста linqtosql в ASP.NET из фонового процесса - PullRequest
0 голосов
/ 04 января 2011

У меня есть приложение 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, это решило бы мою проблему, но я не знаю, можно ли или как это можно сделать с помощью структуры структуры.

1 Ответ

0 голосов
/ 07 января 2011

Я верю, что вы хотите метод EjectAllInstances; это избавит от кэшированного экземпляра контекста данных, поэтому в следующий раз, когда вы запросите один из StructureMap, он будет создан заново.

...