2012-10-15 2 views
9

나는 아래 모델과 MVC 응용 프로그램을 만들려고 해요 : (. 코드가 큰 나는 당신을 위해 더 이해할 수있을 것입니다 생각)왜 "modifier 'virtual'이 (가)이 항목에 유효하지 않습니다"오류가 발생합니까?

public class Job 
{ 
    public int JobId { get; set; } 
    public string Name { get; set; } 

    public List<Job> GetJobs() 
    { 
     List<Job> jobsList = new List<Job>(); 
     jobsList.Add(new Job { JobId = 1, Name = "Operator" }); 
     jobsList.Add(new Job { JobId = 2, Name = "Performer" }); 
     jobsList.Add(new Job { JobId = 3, Name = "Head" }); 
     return jobsList; 
    } 
} 

public class Person 
{ 
    public virtual int PersonId { get; set; } 
    public string FullName { get; set; } 
    public int JobId { get; set; } 
    public virtual Job Job; 
    public string Phone { get; set; } 
    public string Address { get; set; } 
    public string Passport { get; set; } 
    [DataType(DataType.MultilineText)] 
    public string Comments { get; set; } 
} 

public class PersonPaidTo : Person 
{ 
    [Key] 
    public override int PersonId { get; set; } 
    public virtual List<Order> Orders { get; set; } 
} 

public class Head : Person 
{ 
    [Key] 
    public override int PersonId { get; set; } 
    public Job Job { get; set; } 
    public Head() 
    { 
     Job.Id = 3; 
    } 
} 

I 필드 Job에 클래스 Person에 오류가 있습니다

수정 자 '가상'은이 항목에 대한 유효하지 않습니다

답변

26

예,이 코드가 잘못되었습니다 :

public virtual Job Job; 

필드는으로 지정되어 있으며 필드는 가상 일 수 없습니다.

public virtual Job Job { get; set; } 

하거나 필드 : 당신이 중 하나는 속성되고 싶어

// Ick, public field! 
public Job Job; 

(내 생각 엔 당신이 이전을 원하지만 모두가 유효한 C 번호 있다는 것입니다.)

+0

^가상 키워드 (var 3)를 넣지 않으면 지연로드가 발생합니다. –

+0

네, 모두 맞습니다. Lazy Loading이 포함되어 있기 때문에 두 번째를 선택합니다. 최선의 답변입니다. –

+5

이 답변으로 문제를 해결하는 데 도움이 되었다면 [대답으로 표시 함]을 고려해야합니다 (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer -작업). –

0

필드를 비공개로 설정하고 공개 속성으로 공개합니다.

//Field 
private Job job; 

//Property 
public virtual Job Job 
    { 
     get { return job; } 
     set { job= value; } 
    } 
관련 문제