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 개의 자리를 차지한 경우 그 이후에 각각 THAT 트랜잭션 중에 3을 각각 가질 수 있습니다. 그러나 작업 단위가 다른 경우 첫 번째 트랜잭션의 일부가 아니므로 항상 5 개의 돌 (커밋 된 상태가 될 때까지)이 표시됩니다.

나는 그것이 의미가 있기를 바랍니다. 작업 단위 = 거래 = 작업 그룹. 해당 트랜잭션에서 함께 작업하는 것이 효과적이지 않으면 새 작업 단위를 작성하는 식으로 진행하십시오.

관련 문제