2013-05-28 2 views
0

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

, например, если я:

IEnumerable listProjects = ((IQueryableUnitOfWork)UnitOfWork) 
.CreateSet<Project>().Include(p=>p.Users).AsEnumerable(); 

, а затем я:

IEnumerable listProjectsWithoutIncludes = ((IQueryableUnitOfWork)UnitOfWork) 
.CreateSet<Project>().AsEnumerable(); 

В объекте listProjectsWithoutIncludes пользователи проекта хранятся, как если бы я сделал запрос с включает.

Кто-нибудь знает, как предотвратить это? Благодарю.

+3

Если это то же самое подразделение, то это работает как ожидалось. Если вы хотите, чтобы они были изолированы, вы бы использовали другую единицу работы? Вся концепция UoW заключается в том, что вы группируете действия вместе, чтобы сформировать единицу работы. Если это отдельные элементы, которые НЕ ДОЛЖНЫ взаимодействовать, то они не являются частью единицы работы? – Belogix

+0

Спасибо, Belogix, я не знал, что Unit Of Work работает именно так. –

ответ

0

Следующее из моего комментария ... Unit Of Work по самой природе группы все вместе как пакет или транзакция. В вашем примере, если вы хотите, чтобы действия были изолированы и не знали друг о друге, вам понадобятся две разные единицы работы.

Подумайте о единице работы как о единой сделке, так что если у вас было 5 камней и у вас было 2 места, тогда у вас было бы 3 раза каждый раз после этого в течение THAT сделка. Однако, если у вас была другая единица работы, она всегда будет видеть 5 камней (до тех пор, пока не будет совершено и т. Д.), Поскольку она не является частью первой транзакции.

Надеюсь, это имеет смысл? Единица работы = Транзакция = Группа работ. Если действия не имеют смысла идти вместе в одной транзакции, тогда создайте новую единицу работы и так далее.

Смежные вопросы