2012-04-15 8 views
1

다음과 같은 두 개의 클래스가 있습니다. 엔티티 프레임 워크 외래 키가 입력 된 엔티티로 남아 있습니다.

public class Quest 
{ 
    public int ID{ get;set; } 

    public string Objective 
    { 
     get; 
     set; 
    } 

    public DateTime StartDate 
    { 
     get; 
     set; 
    } 

    public string Story 
    { 
     get; 
     set; 
    } 

    public virtual QuestLocation Location 
    { 
     get; 
     set; 
    } 
} 
    public class QuestLocation 
{ 
    public DateTime CreateDate 
    { 
     get; 
     set; 
    } 

    public int ID 
    { 
     get; 
     set; 
    } 

    public double Latitude 
    { 
     get; 
     set; 
    } 

    public double Longitude 
    { 
     get; 
     set; 
    } 

    public virtual Quest Quest 
    { 
     get; 
     set; 
    } 

} 

나는 퀘스트의 새로운 인스턴스를 생성하고 그 후 나는 퀘스트가 단순히 QuestLocation 클래스의 새 인스턴스를 생성하는 위치 속성을 설정했습니다.

Question q = new Question(); 
    q.StartDate = DateTime.Now; 
    q.Objective = "foo"; 
    q.Location = new QuestLocation(){ CreateDate = DateTime.Now, Latitude = 10 , Longitude = 10 }; 

    And add newly created Quest into Database : 
    DataContext.Quests.Add(q); 
    DataContext.SaveChanges(); 

데이터베이스를 보면 지금까지 초기화 한 모든 개체가 만들어집니다. 그러나 QuestLocation의 외래 키 "Quest_ID"는 여전히 NULL입니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0
Question q = new Question(); 
QuestionLocation qL = new QuestLocation(){ CreateDate = DateTime.Now, Latitude = 10 , Longitude = 10 }; 
q.StartDate = DateTime.Now; 
q.Objective = "foo"; 
q.Location = qL; 

//And add newly created Quest into Database : 
DataContext.QuestLocations.Add(qL); 
DataContext.SaveChanges(); 

DataContext.Quests.Add(q); 
DataContext.SaveChanges(); 
+0

성능에 문제가 있습니까? 이 경우 객체를 추가 할 때마다 변경 사항을 저장해야하기 때문에 – kkocabiyik

+0

첫 번째'SaveChanges()'메소드를 생략 할 수 있습니다. 제 생각에는 성능 문제가 해결 될 수 있습니다. – sarwar026

+0

첫 번째 SaveChanges를 생략하면 내 코드와 코드의 차이점은 무엇입니까? Quest_ID를 설정하여 QuestLocation 객체 인스턴스를 퀘스트로 자동 설정하지 않아야합니까? – kkocabiyik

0

questlocation 개체에 quest_id를 설정해야합니다. 외부 키 필드 (quest_id)를 데이터베이스에서 null이 아닌 것으로 설정하는 것도 좋은 방법입니다.

관련 문제