저는 ADO.NET Entity Framework에 어려움을 겪고 있습니다. 이것은 내 ER 다이어그램입니다.EF : 컨텍스트를 삭제 한 후 참조를로드합니까?
--------------------- ----------------- ---------------
| GrandParentEntity |<-------| ParentEntity |<-------| ChildEntity |
+-------------------+ 1 N +---------------+ 1 N +-------------+
| Id | | Id | | Id |
--------------------- | GrandParentFk | | ParentFk |
----------------- ---------------
개체 컨텍스트의 수명에 대해 질문이 있습니까? 내가 다음과 같이 데이터를 요청한다고 가정 해 보겠습니다.
public static List<MyParentEntity> GetMyParentEntity()
{
using (var context = new MyObjectContext(blablabla...))
{
var resultSet = from e in context.MyParentEntitySet select e;
return resultSet.ToList();
}
}
나는 모든 상위 엔티티의 목록을받습니다. 나중에 (시간?) 사용자는 검사 할 항목을 결정합니다. (한편, 엔티티 객체는 응용 프로그램의 여러 계층을 통과.) 지금 레코드의 모든 세부 사항을로드 할 수 있습니다이는 경우 ObjectDisposedException로 연결
public static void LoadChildren(MyParentEntity pEntity)
{
using (var context = new MyObjectContext(blablabla...))
{
pEntity.GranParentEntityReference.Load();
pEntity.ChildEntites.Load();
}
}
을의 MyParentEntity 개체가에 연결이 끊어졌습니다 때문에 그것을 만든 객체 컨텍스트 이 문제를 처리 할 수있는 여러 가지 방법이 있습니다.
1) 항상 MyObjectContext 인스턴스 하나를 사용할 수 있으며 절대로 닫지 마십시오. 이것은 엄청난 메모리 낭비를 초래합니다.
2) "사용 (컨텍스트)"블록을 떠날 때마다 각 단일 개체 개체 (및 그 자식 및 부모 개체)를 수동으로 분리 할 수 있습니다. 그리고 새로운 "using (context)"블록을 입력 할 때마다 첨부 할 수 있습니다. 많은 노력을합니다. (내 견해로 프레임 워크는 증가시키지 않고 노력을 줄여야합니다.) 새로운 "사용 (컨텍스트)"블록을 입력 할 때마다 다시로드하고 각 엔티티를 버리십시오. SQL Server에서 더 많은 (불필요한)로드로 이어지고 메모리를 낭비합니다.
4) 응용 프로그램이 시작될 때 모든 참조 정보와 모든 참조 정보 및 모든 참조 정보 및 해당 참조 정보를로드 할 수 있습니다. (토론이 정말 바보입니다!) ... (내가 옵션을 잊어 버리셨습니까
5)) 이제
당신을위한 큰 질문 : 내가 방법을 선택해야합니까? 내가 보지 못한 다른 방법이 있습니까? 아니면 프레임 워크의 정신을 완전히 오해 했습니까?
미리 감사드립니다.
업데이트 : Windows Forms 응용 프로그램입니다.
감사합니다. 질문은 Windows Forms 응용 프로그램에 대한 것입니다. 웹 서비스가 없습니다. 예, Julia Lermans의 책은 정말 훌륭합니다. 문제가 해결되어야한다는 힌트를 찾지 못했습니다. 귀하의 회신에 감사드립니다. – Chrigl