2012-10-15 38 views
9

Tôi đang cố gắng để tạo ra ứng dụng MVC với mô hình dưới đây: (. Mã là lớn tôi nghĩ rằng nó sẽ dễ hiểu hơn cho bạn)Tại sao tôi nhận được thông báo "Sửa đổi" ảo 'không hợp lệ cho mục này "?

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

Tôi có một lỗi trong lớp Person trong lĩnh vực Job:

Các modifier 'ảo' không hợp lệ cho mặt hàng này

Trả lời

26

Vâng, mã này là không hợp lệ:

public virtual Job Job; 

Đó là tuyên bố một trường và các trường không thể ảo. Bạn có thể muốn nó trở thành một tài sản:

public virtual Job Job { get; set; } 

Hoặc chỉ là một lĩnh vực:

// Ick, public field! 
public Job Job; 

(Tôi đoán là bạn muốn trước đây, nhưng cả hai đều có giá trị C#.)

+0

và một câu hỏi khác^điều gì sẽ xảy ra với tải chậm nếu tôi không đặt từ khóa ảo (var 3) –

+0

có, cả hai đều chính xác. tôi chọn thứ hai vì nó bao gồm tải Lazy. Trân trọng –

+5

Nếu câu trả lời này giúp bạn giải quyết vấn đề bạn đang gặp phải, bạn nên cân nhắc ['đánh dấu nó là câu trả lời'] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer -công việc). –

0

Các đúng cách để biến trường thành riêng tư và hiển thị trường với thuộc tính công khai.

//Field 
private Job job; 

//Property 
public virtual Job Job 
    { 
     get { return job; } 
     set { job= value; } 
    } 
Các vấn đề liên quan