2012-09-21 2 views
2

그래픽 응용 프로그램을 만들고 있는데 사용자가 SQL Sever 데이터베이스에서 그래픽 데이터를 가져올 수있는 곳입니다. 이 응용 프로그램은 최소한 100,000 개 이상의 엔터티를 처리 할 수 ​​있어야합니다. 데이터를 더 빨리로드하려면 데이터베이스 파일을 여는 동안 시각적 데이터를로드하고 필요할 때 비 시각적 데이터를로드해야합니다. 그래서, 내가 직면하고있는 문제는 Entity Framework를 사용하여 데이터베이스에서 데이터를로드하는 것입니다. 그래서Entity Framework를 사용하여 On Demand 데이터로드

class GeometryData : DbContext 
{ 
    DbSet<Polyline> Polylines {get; set;} 
} 

:

class Polyline 
{ 
    Guid ID {get; set;} 
    PolylineGeometry PGeometry {get; set;} 
    PolylineAttribData PAttribData {get; set;} 
} 
class PolylineGeometry 
{ 
    List<Point3D> PointCollection {get; set;} 
} 
class PolylineAttribData 
{ 
    Image ImageData {get; set;} 
} 

내 콘텍스트 클래스는 다음과 같다 :

각 엔티티는 시각과 연관되어 다음의 비 - 비주얼 데이터를 보유하는 엔티티의 일 예이다 데이터베이스 컨텍스트 또는 기하학 데이터를 처음 만들면 폴리 라인에 ID 만로드되고 PGeometry & PAttribData가로드되지 않습니다. 그렇다면이 데이터를 어떻게로드합니까?

판 카지

을 주셔서 감사합니다

답변

2

네비게이션 속성 (다른 항목 참조)을 가상으로 설정해야한다고 생각합니다.

다음은 지연로드를 사용하는 경우 관련 엔터티가 컨텍스트가 삭제되지 않는 한 "요청시"로드됩니다. 솔루션에 대한

http://msdn.microsoft.com/en-us/magazine/hh205756.aspx

+0

감사 : Load()

당신은 여기 게으른, 열망, 명시 적 로딩, 장점과 단점에 대한 좋은 기사를 찾을 수 있습니다 사용

또는 필요로 할 때 당신은 명시 적으로로드 할 수 있습니다, 잘 작동합니다. 좋아, 나는 로딩의 다른 유형 뒤에 개념을 이해합니다. Eager Loading을 사용하여 필요할 때 "PAttribData"데이터 속성을 GeometryData gD = new GeometryData();로로드했습니다. var polyLinesWithGeometryAndAttributes = gD.Polylines.Include ("PGeometry"). 포함 ("PAttribData"); 자, 속성 데이터를 언로드하고 싶습니다. – Pankaj

+0

따라서이 기술의 배경은 사용자가 작업하려는 데이터를 가져와 작업이 완료되면 언로드하는 것입니다. 이렇게하면 RAM에 메모리를 유지하는 데 도움이됩니다. – Pankaj

+0

@Pankaj 글쎄, 당신의 코드는 어딘가에서 문맥이 빠져있다. 아이디어는 필요에 따라 느슨하게 (데이터베이스에 X 콜을 의미) 또는 열정적으로 ("데이터베이스에서 오브젝트로의 큰 전송"을 의미하는) 필요한 것을로드하는 것입니다. 귀하의 "행동"이 종료 될 때마다 귀하는 귀하의 상황을 처분합니다. 처분 할 때 아무 것도 메모리에 남아 있지 않습니다. –

1

명시 적으로 문을 포함 작성해야합니다;

GeometryData gD = new GeometryData(); 
var polyLinesWithGeometryAndAttributes = gD.Polylines.Include("PGeometry").Include("PAttribData"); 
관련 문제