В настоящее время я работаю в диспетчерской службе, которая обрабатывает тысячи сообщений, доставляемых по разным каналам (электронная почта, личное сообщение, сообщение приложения) с использованием EF4 и WCF.
Чтобы попытаться ускорить отправку сообщений, я 'я пытаюсь использовать Parallels:
Parallel.ForEach(currentMessageList, m =>
{
Processors.DispatcherWrapper.Dispatch(m, m.unfChannels.AgentName, m.unfChannels.AgentParameters);
}
);
В методе My Dispatch используется отражение, чтобы сопоставить метод конфигурации канала и обрабатывать каждое сообщение одновременно, но у меня возникают большие проблемы при попытке обновить объекты EF в потоках, когда я делаю SaveChanges() к глобальной сущности (инициализируется в application_start)
Проблемы бывают разных типов:
- Пустые ссылки на объекты
- Элемент списка Свойство является частью объекта.Информация о ключе объекта и не может быть изменена.
- Базовый поставщик не удалось открыть.
- Новая транзакция не разрешена, поскольку в сеансе работают другие потоки.(после принудительного открытия соединения, если оно закрыто)
Вопрос в том, является ли EF4 поточно-ориентированным для реализации этого сценария?Является ли мой подход к созданию глобальных сущностей лучшим решением, или я должен сделать для каждой задачи инициализации EF4?
Любая помощь приветствуется, я уже потерял 2 часа, пытаясь найти возможный обходной путь.