2012-09-19 3 views
1

Entity Framework를 사용하기 시작하고 문제가 발생했습니다.Entity Framework - 빈 자식을로드하는 방법

내 데이터베이스에는 2 개의 테이블이 있습니다. 하나는 ID와 암호가 들어있는 Agent이고 다른 하나는 AgentDetail이고 다른 하나는 Agent에 대한 정보가 들어있는 테이블입니다. 그러나 모든 상담원 레코드에 해당하는 AgentDetail 레코드가 없을 수 있습니다.

나는이 2 개 개의 클래스가 그 두 테이블을 표현해야한다 :

public class Agent 
{ 
    public string AgentId { get; set; } 
    public string Password { get; set; } 
    public virtual AgentDetail AgentDetail { get; set; } 
} 

public class AgentDetail 
{ 
    public string AgentDetailId { get; set; } 
    public string AgentName { get; set; } 
    public string Postcode { get; set; } 
} 

나는 데이터베이스 확인에 데이터를 추가 할 수 있습니다 EF를 사용. 두 테이블에 해당 레코드가 있으면 데이터를 검색 할 수도 있습니다. 그 기록은 AgentDetail 테이블에 존재하지 않는 경우 AgentDetail 내에서 값을 렌더링 할 때

 var agents = from a in context.Agents 
        select a; 

     return View(agents.ToList()); 

그러나 나는 내보기에서 NullReferenceException이 얻을.

이제 AgentDetail 레코드가 없으므로 완전히 예상됩니다.

제 질문은 테이블에 레코드가 없을 때 EF에서 빈 값으로 AgentDetail을 만드는 방법입니다.

는 내가 LINQ 쿼리의 빈 자식 객체를 추가 할 수 - 뭔가 같은 :

 var agents = (from a in rb.Agents 
         select new 
         { 
          AgentId = a.AgentId, 
          Password = a.Password, 
          AgentDetail = a.AgentDetail == null ? new AgentDetail() : a.AgentDetail, 
         }).ToList(); 

(위 그러나 나는 다음과 같은 메시지가 도착대로 작동하지 않습니다

엔터티 또는 복합 형식을 'Models.AgentDetail'은 LINQ to Entities 쿼리에서 구성 할 수 없습니다.

+0

EF가 AgentDetail을 실제로 생성하지 않으려면 기록을 남기고 기록을 남기고 싶습니까? –

+0

안녕하세요. 마크, 아니에 대해 신경 쓰지 않아요. 난 그저 존재하지 않는 자식 데이터를 처리하는 가장 좋은 방법을 알고 싶었습니다. – BrightonDev

답변

3

실제로 '빈'항목을 인위적으로 추가하지 않으려는 경우 (뒤로 굴곡하지 않고) 해당 개체가 시도되기 때문에 데이터베이스에 유지됩니다.

가장 좋은 방법은 하위 데이터의 부분보기를 분리하고 값을 읽기 전에 null을 확인하는 것입니다.

+0

안녕하세요, Andrew. 당신이 말하는 것은 완벽한 의미입니다. 감사. – BrightonDev