2017-03-03 1 views
0

DBContext 평등 :엔티티 프레임 워크 - 나는 기존 DBContext이 때문에 같은 지역 변수에 할당 된 코드의 비트를 상속 한

using(var context = new DBContext()) 
{ 
    try 
    { 
    ... 

    var localContext = context; 
    MethodThatAddsStuffToContext(localContext); 

    ... 
    } 
    catch etc. etc. 

    context.SaveChanges(); 
} 

내 질문은 : 나는 다른 컨텍스트가 자신의 변화를 유지 것이라는 점을 알고있다 그들이 후에 만 ​​다른 상황에 의해 포착 될 것이라는 저장하지만, :

  1. 은 컨텍스트가 context 이상 localContext이 같은 추가 사항을 공유하고, 하나를 절약 다른 변경 사항을 커밋 것을 의미, 참조 평등를 사용하십니까 ?
  2. 두 개의 기존 별도 컨텍스트가 있고 하나만 저장하면 이후의 모든 쿼리에서 새 컨텍스트에서 변경 내용이 자동으로 선택되거나 해당 컨텍스트가 만들어지는 시점에서 컨텍스트 "캐시"가 수행됩니다. 이것에 대한 대답은 전자이지만 명확히하고 싶다)?
  3. 코드 스 니펫이 나쁜 습관입니까? 내가 권하는 어떤 상황도 생각할 수 없다.
+5

컨텍스트와 localContext는 DBContext의 동일한 인스턴스를 가리키는 두 개의 변수입니다.그래서 당신은 그들이 뭔가를 "공유"하거나 그들이 "분리되어있다"고 말할 수 없습니다. 두 가지가 아니라 여기에 하나의 컨텍스트가 있습니다. – Evk

+0

@Evk, 그럼 참조 평등은? 그게 내가 묻는 전부 야. DBContexts, 즉 질문에 대한 .Equals의 동작에 대한 설명서는 어디에서도 찾을 수 없습니다. 나는 왜 어떤 사람이 이전의 건축가가 가치 평등이 아니라면 무엇을했는지 이유를 알 수 없었다. –

+2

클래스 작성자가 어떻게 든이 동작을 변경하지 않는 한 모든 클래스 (구조체 아님)는 기본적으로 참조 동등성을 사용합니다. 그러나 DbContext에 대해 가치 평등을 사용하는 것은 전혀 의미가 없으므로 그 의미가 무엇인지 상상할 수 없습니다. 또한 제공 한 코드 스 니펫에서 변수를 복사하는 것은 의미가 없습니다. – Evk

답변

1
  1. 그 상황을 의미 컨텍스트가 참조 평등를 사용하십니까과 localContext는 위와 같은 추가 사항을 공유하고, 하나를 저장하면 다른 한편으로는 변경 사항을 적용 할 것인가?

이들은 두 문맥이 아니며, 두 문맥은 동일한 문맥을 참조합니다. 컨텍스트는 값 유형이 아닌 참조 유형입니다. SaveChanges이 호출되면 하나의 컨텍스트에서만 호출됩니다. localContext 또는 context에서 참조해도 상관 없습니다.

  • 나는 기존의 두 별도의 컨텍스트를 가지고 있고, 나는 변화가있을 것입니다 자동으로 미래의 질의에 새로운 맥락에서 픽업, 또는 문맥을 수행, 하나를 저장하는 경우 "캐시
      "그것이 만들어지는 시점에서 (꽤 확실한 답변은 전자이지만 분명히 명확히하고 싶다)?
  • "캐시"와 "변경 사항 가져 오기"의 의미는 명확하지 않습니다. 엔티티 캐싱이 없으며, 컨텍스트가 알고있는 엔티티 객체에 대한 변경 추적 만 있습니다. 변경 추적은 컨텍스트 단위로 발생합니다. 즉, 실제로 두 개의 독립적 인 컨텍스트가있는 경우 하나의 컨텍스트에 저장하면이 컨텍스트의 추적 된 개체가 업데이트됩니다. 다른 컨텍스트는 첫 컨텍스트의 개체에 대해 알지 못하기 때문에 이러한 변경에 영향을받지 않습니다.

    1. 위의 코드는 나쁜 습관입니까? 내가 권하는 어떤 상황도 생각할 수 없다.

    이 질문에은 보편적으로 대답 할 수 없습니다. 하나의 컨텍스트가 관련되어 있고 contextlocalContext이 할당 후에 절대로 변경되지 않으면 코드는 이해가되지 않으며 최소한 혼란 스럽습니다 (혼란스러워서 요점을 입증 함). 그러나, 예를 들어, 다중 문맥이 관련되어 있고, localContext이 그 중 하나가 될 수있는 경우와 같이, 그러한 할당이 이해되는 다른 경우가 있습니다.

    관련 문제