2012-10-15 55 views
9

我试图创建下面模型MVC应用程序:(代码是大,我认为这将是您更容易理解)为什么我会得到“虚拟修饰符”对此项无效“错误?

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; 
    } 
} 

我有Person类的错误在该领域Job

修饰语 '虚拟' 是无效的这个项目

回答

26

是的,这个代码是无效的:

public virtual Job Job; 

这是宣布字段,字段不能是虚拟的。要么你希望它是一个属性:

public virtual Job Job { get; set; } 

或者只是一个字段:

// Ick, public field! 
public Job Job; 

(我的猜测是,你希望是前者,但两者都是有效的C#)

+0

和一个问题^会是怎样与懒加载,如果我不把虚拟的关键字(VAR 3) –

+0

是,两者都是正确的。我选择第二个,因为它包含延迟加载。最好的问候 –

+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; } 
    } 
相关问题