2010-01-21 5 views
1

Entity Framework를 배우고 있으며 다음 시나리오를 얻으려고합니다.Linq to Entities 간단한 하위 쿼리

저는 Person 클래스와 Message 클래스가 있습니다. 메시지 클래스에는 모두 유형이 Person 인 From 속성과 To 속성이 있습니다. 엔티티에 Linq를 사용하여 메시지 목록을 가져 오려고합니다. 내 DB 테이블은 Message와 Person입니다. Message에는 Person 테이블의 PK ID를 가리키는 int 유형의 From 및 To 열이 있습니다.

다음은 지금까지 쿼리 가능한 essage 목록을 채우기위한 코드입니다. 그래서 여기에 내 문제는 사람 데이터를로드하는 것입니다. 어떻게하면 가장 효율적인 방법으로이 작업을 수행 할 수 있습니까? 방법에 관한 설명은 크게 감사하겠습니다.

var messages = from m in _entities.Message 
          select new BizObjects.Message 
          { 
           MessageId = m.MessageId, 
           From = new BizObjects.Person 
           { 
            PersonId = m.From 
           }, 
           To = new BizObjects.Person 
           { 
            PersonId = m.To 
           }, 
           Subject = m.Subject, 
           Content = m.Content, 
           Read = m.Read, 
           CreatedOn = m.CreatedOn, 
          }; 

더 많은 코드 또는 배경 정보가 필요하면 알려주십시오. 귀하의 도움에 미리 감사드립니다.

답변

1

Person 사이에 associations이 있어야합니다. EF 디자이너가 자동으로 작성하므로 이미 작성한 것입니다. 그러나 열 이름 대신 외부 키에서 생성되므로 자동 작성된 연결은 Message.Person1 또는 뭔가와 같이 유용하지 않은 이름으로 작성되었을 수 있습니다. 디자이너에서 선택하여보다 유용한 이름으로 바꿀 수 있습니다.

귀하의 연결을 Message.FromPersonMessage.ToPerson라고 가정 해 봅시다. 당신은 다음과 같은 쿼리를 작성할 수 있습니다 : 엔티티 조회에 내 LINQ의 연결 속성을 사용하여

 var messages = from m in _entities.Message 
         select new BizObjects.Message 
         { 
          MessageId = m.MessageId, 
          From = new BizObjects.Person 
          { 
           PersonId = m.FromPerson.PersonId, 
           PersonName = m.FromPerson.PersonName 
          }, 
          To = new BizObjects.Person 
          { 
           PersonId = m.ToPerson.PersonId, 
           PersonName = m.ToPerson.PersonName 
          }, 
          Subject = m.Subject, 
          Content = m.Content, 
          Read = m.Read, 
          CreatedOn = m.CreatedOn, 
         }; 

을, 나는 엔티티 프레임 워크가 SQL에서 LEFT OUTER JOIN에이 참조를 음역 원인입니다.

이것은 실제로 필요한 열만 선택하고 모두 하나로 완료되므로 데이터를로드하는 데 매우 효율적입니다 (특히 지연로드와 달리 너무 많은 열에 대해 여러 데이터베이스 쿼리가 발생 함). 질문.

관련 문제