2016-08-08 3 views
1

나는 다음과 같은 요소를 가지고 :Entity Framework의 새 개체에 외래 키를 열심히로드 할 수 있습니까?

public class Seminar 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Title { get; set; } 
    public string Description { get; set; } 

    public virtual List<Meeting> Meetings { get; set; } 
} 

public class Meeting 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public int SeminarId { get; set; } 
    public string ThirdPartyId { get; set; } 
    public DateTime StartDate { get; set; } 

    public virtual Webinar Webinar { get; set; } 
} 

MeetingSeminarId 특성 (외래 키)에 의해 Seminar 관련이있다.

제 3 자 API를 호출 한 후 속성 (이름을 변경하여 관심 분야를 보호)이 채워지므로 해당 시스템에 대한 '링크'입니다.

이 호출을하려면 (해당 시스템에서 동일한 객체를 만드는 경우) 회의와 관련된 세미나 정보 인 TitleDescription이 필요합니다.

그럼 내가 지금처럼 새로운 모임을 만들 가정 해 봅시다 :

using (var db = new MyDbContext()) 
{ 
    Meeting meeting = new Meeting 
    { 
     SeminarId = 5 // this would normally be loaded from elsewhere, obviously 
    }; 

    // Load the meeting.Webinar property somehow here 

    m_thirdPartyApiClient.CreateMeeting(meeting); // Uses meeting.Webinar.Title and meeting.Webinar.Description 

    db.SaveChanges(); 
} 

는 내가 뭘하고 싶은 것은 타사 API 또는 SaveChanges를 호출하기 전에 meeting에 외래 키 속성을로드하는 것입니다. 이것이 가능한가?

+0

왜 그냥 ID로 세미나에 대한 데이터베이스를 호출? –

+0

그럼 API 클라이언트를 수정하고 회의 * 및 * 세미나를 통과해야합니다. 나는 그것을 고려했다. 그러나 그것은 이상적이지 않다. –

+0

아니요. 반환 된 세미나를 가상 세미나 필드 –

답변

1

해당 ID로 세미나 데이터베이스를 호출하고 Meeting.Seminar = dbSeminar과 같은 회의에 지정하기 만하면됩니다. 귀하의 의견을 대답하기 위해, virtual은 상속 클래스에 의해이 메소드/속성이 덮어 쓰여질 수 있으며, 실제 유형이 기본 유형 인 경우 참조가 기본 클래스 인 경우에도 상속 클래스의 prop/메소드 을 사용하도록 덮어 쓸 때 상속 클래스. 당신이 해당 DbSet에 엔티티 객체를 추가하면

+0

맹세 할 수 있었고 나는 이것을 시도했지만 이전에는 작동하지 않았다. 오 잘. 감사! –

1

,이 같은 Load 방법을 사용하여 모든 참조 속성을로드 할 수

Meeting meeting = new Meeting 
{ 
    SeminarId = 5 // this would normally be loaded from elsewhere, obviously 
}; 
db.Meetings.Add(meeting); 
// meeting.Webinar is still null 
db.Entry(meeting).Reference(m => m.Webinar).Load(); 
// meeting.Webinar is populated 
관련 문제