Я в настоящее время борюсь с этим "Набором, был изменен; операция перечисления не может выполнить" проблему.
Я искал об этом сообщении об ошибке, и оно все связано с foreach оператором. У меня действительно есть некоторые foreach операторы, но они просто представляют данные. Я не сделал использования, любой удаляет или добавляет в foreach операторе.
Примечание:
Кто-либо знает, почему это происходит и как решить этот вопрос?
Друг (Oskar) упомянул это
"Теория: Возможно, проблема состоит в том, что Ваша фабрика конфигурации и сессии инициализируется по первому запросу после перезапуска приложения. Если второй запрос входит, прежде чем первый запрос закончен, возможно, он также попытается инициализировать и затем инициировавший эту проблему так или иначе".
Большое спасибо.
Daoming
Вот сообщение об ошибке:
Система. Набор InvalidOperationException был изменен; операция перечисления не может выполниться. Система. InvalidOperationException: ошибка произошла при попытке создать контроллер типа 'WebController. Контроллеры. Администратор. AdminProductController'. Удостоверьтесь, что контроллер имеет общедоступного конструктора без параметров.---> Система. Отражение. TargetInvocationException: Исключение было выдано целью вызова.---> NHibernate. MappingException: не Мог настроить хранилище данных от входного потока DomainModel.Entities.Mappings.OrderProductVariant.hbm.xml---> Система. InvalidOperationException: Набор был изменен; операция перечисления не может выполниться. в System. Наборы. ArrayList. ArrayListEnumeratorSimple. MoveNext () в Системе. Xml. Схема. XmlSchemaSet. AddSchemaToSet (схема XmlSchema) в System. Xml. Схема. XmlSchemaSet. Добавьте (Представьте в виде строки targetNamespace, схему XmlSchema) в System. Xml. Схема. XmlSchemaSet. Добавьте (схема XmlSchema) в NHibernate. Cfg. Конфигурация. LoadMappingDocument (XmlReader hbmReader, Имя строки) в NHibernate. Cfg. Конфигурация. AddInputStream (Поток xmlInputStream, Имя строки)---Конец внутреннего отслеживания стека исключительной ситуации---в NHibernate. Cfg. Конфигурация. LogAndThrow (Исключение исключения) в NHibernate. Cfg. Конфигурация. AddInputStream (Поток xmlInputStream, Имя строки) в NHibernate. Cfg. Конфигурация. AddResource (Строковый путь, блок блока) в NHibernate. Cfg. Конфигурация. AddAssembly (Блок блока) в DomainModel. RepositoryBase.. ctor () в WebController. Контроллеры. _ baseController.. ctor () в WebController. Контроллеры. Администратор. AdminProductController.. ctor () в System. RuntimeType. CreateInstanceImpl (булевская переменная publicOnly, булевская переменная skipVisibilityChecks, булевская переменная fillCache)---Конец внутреннего отслеживания стека исключительной ситуации---в System. RuntimeType. CreateInstanceImpl (булевская переменная publicOnly, булевская переменная skipVisibilityChecks, булевская переменная fillCache) в System. Активатор. CreateInstance (Вводят тип, непубличная булевская переменная) в System. Сеть. Mvc. DefaultControllerFactory. GetControllerInstance (RequestContext requestContext, Тип controllerType)---Конец внутреннего отслеживания стека исключительной ситуации---в System. Сеть. Mvc. DefaultControllerFactory. GetControllerInstance (RequestContext requestContext, Тип controllerType) в System. Сеть. Mvc. DefaultControllerFactory. CreateController (RequestContext requestContext, Строка controllerName) в System. Сеть. Mvc. MvcHandler. ProcessRequestInit (HttpContextBase httpContext, контроллер IController&, фабрика IControllerFactory&) в System. Сеть. Mvc. MvcHandler. BeginProcessRequest (HttpContextBase httpContext, обратный вызов AsyncCallback, Объектное состояние) в System. Сеть. HttpApplication. CallHandlerExecutionStep. Система. Сеть. HttpApplication. IExecutionStep. Выполнитесь () в Системе. Сеть. HttpApplication. ExecuteStep (шаг IExecutionStep, Boolean& completedSynchronously)
Оскар прав. Два отдельных потока одновременно пытаются инициализировать фабрику сеансов. Предложите вам установить некоторую блокировку вокруг кода инициализации, возможно, просто используя ключевое слово lock
и подходящий объект синхронизации. Мы использовали подобный шаблон, используя одну из блокировок из библиотеки Wintellect PowerThreading:
using (_lock.WaitToRead())
{
if (Factory != null) return Factory;
}
using (_lock.WaitToWrite())
{
if (Factory != null) return Factory;
Factory = ConfigureFactory();
return Factory;
}
Вы могли бы проще использовать ключевое слово lock
и шаблон блокировки с двойной проверкой, например:
class NestedSessionManager
{
internal static SessionManager _sessionManager;
private static readonly object _syncRoot = new object();
internal static SessionManager sessionManager
{
get
{
if (_sessionManager != null) return _sessionManager;
lock (_syncRoot)
{
if (_sessionManager != null) return _sessionManager;
_sessionManager = new SessionManager();
return _sessionManager;
}
}
}
}