2016-09-14 1 views
0

using-DbContext 범위 내에 모든 논리 함수가 있습니다. 나중에이 코드를 컨텍스트를 사용하여 목록을로드 한 다음이 형식으로 변경하고 즉시 처리하고 추가 계산을 위해 목록을 사용하는 쓰기 (리팩토링)를 원합니다.DbContext가 삭제 된 후에 EF-linq-query-result를 사용하는 것이 유효합니까?

Test() 
{ 
    var list = (List<MyObject>)null; 

    using(var ctx = new MyDbContext()) 
    { 
     list = ctx.MyTable.ToList(); 
    } 

    // is the list guaranteed to be unchanged? 
    foreach(var item in list) 
    { 

    } 
} 

유일한 차이점은 (내가 생각하는 것처럼)이 EF는 개체의 캐시를 떨어졌다, 그래서 데이터베이스 anylonger (나는 보통 원하지 않는 것을/어쨌든 사용) 업데이트 할 수 없습니다.

컨텍스트가 삭제 된 후에도 목록을 사용하는 것이 안전합니까?

+0

TBH, 그것은 일반적으로 라인을 작동하지 않습니다. 하지만 당신 말이 맞아요, 이런 식으로 하나의 선언문에, 나는 또한 정규식으로 가야합니다. – user5997884

+0

질문이 약간 이상합니다. 이런 식으로하지 않으면 EF 쿼리의 결과를 어떻게 사용하고 싶습니까? 'ToList' 없이도 작동하는지 묻는 것이 더 합리적 일 것입니다. 내 대답은 아니오 야". 컨텍스트는 사용 후에 삭제되기 때문에. –

+0

'IEnumerable '으로리스트를 선언하고'ToList'를 제거하면 어떻게되는지 봅니다. 'foreach'에서 예외가 생깁니다. 'ToList'는 실제로 _deferred executed_ LINQ 쿼리를 실행합니다. 결과는 메모리에로드되며 더 이상 데이터베이스와 관련이 없습니다. –

답변

1

짧은 대답, 예. 일단 ToList()를 호출하면 객체는 EF에서 분리되어야하지만 EF에 정의 된 추적 프록시가 첨부됩니다.

없음 EF 물건은 더 읽을 수 있도록, 다른`var` 선언으로 ... 게으른 로딩 등처럼, 비록에

관련 문제