2010-11-18 4 views
3

ADO.NET에서 탐색 속성과 상속을 사용하여 약간의 문제가 있습니다.ADO.NET 탐색 속성

ADO.NET Data Model

는 첫째, 일부 어휘 :

제품 분류 카테고리를
Formulario = 양식
캄포 = 필드
Imagem의를 = = 이미지

내 데이터 모델입니다 Paragrafo = 단락
Escolha = 선택
Texto = 텍스트
Resposta는 = 그래서, 나는 그것이 답이 계산의 반환 양식에 사용자 지정 속성을 만들려고 해요

답변.

일반적인 접근 방법은 (내가 생각하는) 것 :

public partial class Formulario 
{ 
    public int Respostas 
    { 
     get 
     { 
      List<Item> itens = this.Itens.ToList(); 

      IEnumerable<Campo> campos = from m in itens where m as Campo != null select (Campo)m; 
      int soma = campos.Sum(m => m.Respostas.Count); 

      return soma; 
     } 
    } 
} 

그러나 그것은 작동하지 않습니다. itens 목록은 0 개의 요소를 반환합니다. 하지만 아래와 같이 할 경우, 4 가지 항목을 반환합니다.

전체 데이터 모델을 인스턴스화 할 때만 작동합니다. 그 이유를 아는 사람 있습니까?

PS : 나는 모든 Linq 쿼리뿐만 아니라 사람 Linq2Entities을 사용할 수 있도록 내가 .toList() 방법을 사용하고있어 내가 엔티티 프레임 워크 1을 사용하거나 당신이있어 같은데요

답변

2

에 저를 허용하거나하지 않습니다 Entity Framework 4에서 지연로드가 활성화되었습니다.

클래스에서 Itens 컬렉션이로드 될 것으로 예상됩니다. Formulario 개체가 데이터베이스에서 검색 될 때 명시 적으로로드 된 경우에만 컬렉션이로드되기 때문에 항상 그런 것은 아닙니다.

if(!Itens.IsLoaded) 
    Itens.Load(); 

List<Item> itens = Itens.ToList(); 
+0

하지만 난 엔티티 프레임 워크에 의해 생성 된 Formulario 클래스를 확장하고 있습니다 :

당신은 갈 수 있어야한다 코드와 모든 것을 두 줄을 추가해야합니다. 객체가 instanciated 때 속성은 acessed이기 때문에 내장 된 탐색 속성이 작동한다고 가정합니다. 하지만 그렇지 않습니다 :/ –

+0

@Rodrigo - 이제 이해합니다 ... 업데이트하겠습니다. –

+0

빙고! 이제 잘 작동합니다. 감사! –