Управление временем жизни ObjectContext между потоками - PullRequest
2 голосов
/ 08 января 2012

В многопоточном процессе ( служба Windows ) основной поток передает запрос EF (IQueryable<>) и номер страницы (int) в подпотоки.

Каждый вложенный поток получает свои данные, используя запрос и страницу, а затем обрабатывает их.

Я думаю, что мне нужно создать новый ObjectContext для каждого потока, когда это необходимо.

Есть ли другие предложения?

Есть ли способ создать запрос и задать ему ObjectContext позже? - Перешел на новый вопрос

спасибо.

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Используйте новый контекст для каждого потока и обрабатывайте его сами. Контекст не является потокобезопасным, поэтому разделение его между параллельными потоками - это путь к катастрофе. Обрабатывать его самостоятельно нужно, если вы используете пул потоков, если у вас нет контроля над временем жизни потока или если вы хотите повторно использовать потоки для нескольких последующих обработок.

0 голосов
/ 08 января 2012

Это зависит от того, является ли ваше приложение веб-приложением или выигрышным приложением.

Но лучшее решение - внедрить его через инфраструктуру DI, которая может обработать это для вас.

Дляпример Ninject имеет предопределенные определения жизненного цикла, такие как InRequestScope, InThreadScope, InSingletonScope и ....

Также предотвращает утечки соединения и памяти.

...