2012-07-21 3 views
2

나는 생산자/소비자 패턴을 구현 해요 :엔티티 프레임 워크 코드 첫 번째 및 생산자/소비자 패턴

  • 검색 기준에 따라 DB에서 오브젝트를 구체화

    프로듀서는

  • 추가 애플리케이션 - 적용 특정 필터링 로직
  • 큐 처리를 위해 구체화 된 개체

소비자 (다중 스레드)

  • 큐에서 구체화 객체를 수신은
  • 이 구체화 오브젝트의 데이터를 사용하여 이메일 템플릿을 채 웁니다
  • 업데이트 구체화 된 객체 상태
  • 는 DB에 새로운 객체 상태를 저장

문제

개체는 제작자 스레드와 관련된 컨텍스트를 사용하여 Entity Framework Code First를 사용하여 구체화됩니다.

소비자 스레드는 자체 컨텍스트가 필요합니다.

생성자 컨텍스트에서 소비자 컨텍스트로 구체화 된 개체 (각 개체는 실제로 개체 그래프 임)를 이동시킬 수 있습니까? 아니면 컨텍스트에서 개체를 다시 구체화해야만 해당 개체를 업데이트 할 수 있습니까? 어떻게해야합니까?

답변

2

내가 당신이 원하는 것은 다음과 같은 생각 : 큐에서

  • 구체화 수신합니다 물체
  • 새로운 상황에 구체화 된 루트를 부착 구체화 객체
  • 의 데이터를 사용하여 이메일 템플릿을 채 웁니다합니다 (유지 이 컨텍스트의 범위는 작음)
  • 구체화 된 개체 상태를 업데이트합니다.
  • 새 개체 상태를 DB

Entity 프레임 워크를 사용하면 컨텍스트 추적 그래프에 개체를 다시 첨부하고이를 데이터베이스에있는 개체의 현재 상태로 처리 할 수 ​​있습니다. 즉, 업데이트 블록에서 터치 한 속성 만 업데이트됩니다. 당신은 단지 추적에 (고유 키에 의해 정의 된) 엔티티를 첨부 할 수 있다는 것입니다

using (var context = new MyContext()) 
{ 
    var dummy = new Test{Id= 1}; 
    context.Tests.Attach(dummy); 
    dummy.Something = "Hello World"; 
    context.SaveChanges(); 
} 

가 뭐죠 중요한이 방법에 대한주의 사항

즉 당신은 업데이트 이전의 선택 경로없이이 업데이트를 따르십시오 한 번 그래프. 따라서 격리 된 상황에서이 작업을 수행하거나 연결 호출을 신중하게 관리하는 것이 매우 중요합니다.

+0

유망한 소리.질문을 게시 한 후에 나는 비슷한 것을 보았습니다. http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add -attach-and-entity-states.aspx. 나는 그것을 시도 할 것이다. –

+0

그래, 처음에는 같은 사람에게서이 방법에 대해 알았을 것 같아. :) 유일한 문제는 첨부 호출이 충돌을 일으키지 않는 것입니다. 내가 준 예제는 스냅 샷 엔티티 추적을 사용하는 것입니다. 프록시 엔티티를 사용하는 경우 조금 다릅니다. –

관련 문제