2012-12-19 4 views
1

내가 가진 응용 프로그램을 엔티티 프레임 워크 5 코드 먼저이 내 수업의 예입니다널 탐색에서의 EF 5 코드 첫

public partial class PlaningCourseAssistant 
{ 
    public PlaningCourseAssistant() {} 
    public int ID { get; set; } 
    public int PlaningCourseID { get; set; } 
    public int AssistantID { get; set; } 

    public virtual PlaningCourse PlaningCourse { get; set; } 
    public virtual Teacher Assistant { get; set; } 
} 

그리고

public class Teacher 
{ 
    public Teacher() 
    { 
     ... 
     this.PlaningCourseAssistants = new HashSet<PlaningCourseAssistant>(); 
    } 
    public int ID { get; set; } 
    public string Name{ get; set; } 
    .... 
    public virtual ICollection<PlaningCourseAssistant> PlaningCourseAssistants { get; set; } 
} 

그리고

public partial class PlaningCourse 
{ 
    public PlaningCourse() 
    { 
    ... 
     this.PlaningCourseAssistants = new HashSet<PlaningCourseAssistant>(); 
    } 
    public int ID { get; set; } 
    public string Title { get; set; } 
    ... 
    public virtual ICollection<PlaningCourseAssistant> PlaningCourseAssistants { get; set; } 
} 

PlaningCourseAssistant에 새 객체를 추가 할 때 :

var pcb = new PlaningCourseAssistant 
{ 
    PlaningCourseID = CourseID, 
    AssistantID = assistantID, 
}; 
try 
{ 
    planingCourseAssistantService.Add(pcb); 
    uow.SaveChanges(); 
} catch { } 

이후에 PlaningCourseAssistant 목록을 가져 오려면 PlaningCourseAssistantAssistant 네비게이션 키가 추가되었습니다.

왜 이런 일이 발생합니까? 어떻게 해결할 수 있습니까?

답변

3

사용중인 PlaningCourseAssistant 인스턴스가 EF로 만든 프록시가 아니기 때문에 EF에서 '길잡이'속성을 지연로드 할 수 없습니다.

당신은 명시 적으로로드

context.Entry(pcb).Reference(p => p.Assistant).Load(); 
context.Entry(pcb.Assistant).Collection(p => p.PlaningCourseAssistant).Load(); 

을 사용 또는 EF는

var pcb = context.PlaningCourseAssistants.Create(); 
+0

프록시 생성이 무엇 PlaningCourseAssistant의 프록시 인스턴스를 만들 수 있도록 할 수 있습니다? – Raika

+1

@Raika EF는 느린로드 탐색 속성에 필요한 논리를 추가하기 위해 엔티티의 하위 클래스를 만듭니다. 그것들을 프록시라고합니다. – Eranga

+0

'Create' 메쏘드가 도움이됩니다. 하지만 내가 그렇게 많은 코드를 변경해야 사용할 것을 원한다면. 데이터를 잃지 않고 내 개체를 프록시 개체로 변환 할 수있는 방법이 있습니까? 나는'PlaningCourseAssistants' 객체를 만들고 그 데이터를 채우는 것을 의미합니다. 지금은 같은 데이터와 프록시 개체로 변환 싶어요. 그게 가능하니? – Raika