Почему я получаю сообщение об ошибке Модификатор «виртуальный» недействителен для этого элемента?

Я пытаюсь создать приложение 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:

Модификатор «виртуальный» недействителен для этого предмета.


person bragin.www    schedule 15.10.2012    source источник


Ответы (2)


Да, этот код недействителен:

public virtual Job Job;

Это объявление поля, а поля не могут быть виртуальными. Вы либо хотите, чтобы это было свойство:

public virtual Job Job { get; set; }

Или просто поле:

// Ick, public field!
public Job Job;

(Я предполагаю, что вам нужен первый, но оба они допустимы в С#.)

person Jon Skeet    schedule 15.10.2012
comment
и еще один вопрос^ что будет с ленивой загрузкой, если я не поставлю ключевое слово virtual (var 3) - person bragin.www; 15.10.2012
comment
да, оба правильные. я выбираю второе, потому что оно включает ленивую загрузку. наилучшие пожелания - person bragin.www; 15.10.2012
comment
Если этот ответ помог вам решить проблему, с которой вы столкнулись, вам следует рассмотреть marking it as the answer. - person Darin Dimitrov; 15.10.2012
comment
@DarinDimitrov Я уверен, что Джон сильно пострадает из-за потери потенциального представителя. - person developerbmw; 31.07.2015

Правильный способ сделать поле приватным и выставить его общедоступной собственностью.

//Field
private Job job;

//Property
public virtual Job Job
    {
        get { return job; }
        set { job= value; }
    }
person Hassan Rahman    schedule 02.03.2016