우리는 Entity 프레임 워크 (Silverlight와 RIA 서비스가 정확함)를 사용하여 WPF 응용 프로그램을 작성하고 있습니다. 우리는 모듈을 통해 데이터를 공유함으로써 이익을 얻을 수 있도록 애플리케이션을 통해 공유 ObjectContext를 사용하고 있습니다.Windows/WPF/Silverlight 응용 프로그램의 Entity Framework ObjectContext
문제는 사용자가 작업을하는 동안 열어 본 판매 내역이 ObjectContext에로드되고 응용 프로그램이 끝날 때까지 거기에 머물러있는 경우입니다. 따라서 다른 패턴을 사용해야합니다.
ObjectContexts를 단일 작업 단위로 사용해야 함을 알고 있습니다. 그렇다면 응용 프로그램의 다른 부분에서 무언가가 변경되었고 데이터를 다시로드해야한다는 것을 어떻게 알 수 있습니까?
편집 : Ok, EventAggregator하지만이 경우 다른 모든 부품이 (아마도 대부분 중복) 데이터를 다시로드하게됩니다. 또한 모든 종류의 entite 그룹에 많은 이벤트가 필요할 것입니다.
어떻게 이러한 문제를 해결합니까? 현재 솔루션은 일종의 타협입니다. 전체 appliaction에서 사용하는 핵심 데이터에 공유 ObjectContext를 사용하여 자동으로 공유 및 업데이트 할 수 있습니다. 그리고 많은 양의 데이터에 대해 새로운 별도의 ObjectContext를 사용하십시오. 더 좋은 아이디어?
Garbage collector가 작업을 수행하고 메모리를 해제 할 수 있도록 DataContext에서 엔터티를 "해제"하는 방법이 있습니까?
이 응용 프로그램에서는 Silverlight에 대해 설명합니다. Prism/Caliburn을 사용하여보기 (모듈?)마다 단일 ObjectContext를 갖는 것이 문제가 아니라고 생각합니다. 다시 말하지만, 클라이언트에 많은 양의 데이터가로드되면 문제는 무엇입니까? 지금까지 가장 좋은 해결책은 전체 애플리케이션을 통해 사용되는 기본 엔티티에 대한 공유 ObjectContext를 생성하여 자동으로 동기화되도록하는 것이고, 대량의 데이터를로드 할 때 ObjectContexts를 별도로 분리하는 것입니다. 일부 역사적 보고서. – gius
나는 정말로 큰 데이터 블록을 클라이언트에 보내려고하지는 않을 것이다. 대신 서버에서 필터링하고 클라이언트가 그 순간에보고 싶은 결과 만 반환합니다. 인간은 10 만 건의 레코드를 읽을 수 없으므로 많은 레코드를 사람에게 보내지 마십시오. 대신 문제를 검색/필터로 보내고 결과 만 클라이언트에 보냅니다. 보고서를 작성하는 경우 서버에서 집계 요약 데이터를 작성하십시오. 예를 들어, 서버에서 월간 판매량을 계산하고 5000 건의 매출 기록보다 클라이언트에 단일 번호를 전송하는 것이 좋습니다. –
사실입니다. 사용자가 애플리케이션을 사용하는 동안 언제든지 페이지 1, 10, 20이라고 말하면 해당 데이터는 여전히 메모리에 저장됩니다. 반면에 별도의 ObjectContext와 데이터 페이징을 사용하면 메모리에 머물러있는 큰 문제를 해결할 수 있습니다. – gius