質問

I have the following model (overly simplified)

public class Training
{
    public string Name { get; set; }
    public IList<Person> Persons { get; set; }
}
public abstract class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Training Training { get; set; }
}

[Table("Students")]
public class Student : Person
{
    public string StudentNumber { get; set; }
    public IList<Training> Trainings { get; set; }
}
[Table("Instructors")]
public class Instructor : Person
{
    public DateTime StartingDate { get; set; }
    public IList<Training> Trainings { get; set; }
}

I would like to query the database using a training name:

var training = _trainingRepository.FindByName("training class 1", include => include.Persons);

This queries the database and includes all the Student and Instructor.

Question:

Let's say I have a person that is neither a student or an instructor but he is part of "training class 1". I would like to know if it is possible to also get said person in the list of Persons and if so how?

Update

The real reason why I am asking the question is because I have 39 distinct derived class and the query built by EF is really slow for obvious reasons. I am trying to get with the initial query only the few most common cases and will get the other cases individually afterward if necessary with a IN (EF Contains) using the base class.

Answer

The answer was to remove the "abstract" keyword from the Base class (Person).

役に立ちましたか?

解決

The answer was to remove the abstract keyword from the Base class (Person):

FROM:

    public abstract class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Training Training { get; set; }
    }

TO:

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Training Training { get; set; }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top