Предполагается, что сущность из Entity Framework имеет заполненный список, но он всегда пуст - PullRequest
0 голосов
/ 14 декабря 2018

Я работаю над проектом для интервью.В моем проекте есть класс EmployeeService для получения сотрудников из базы данных.Сотрудники могут иметь список зависимых лиц.Однако этот список всегда возвращается как пустой массив.

Вот как выглядит моя сущность:

public class Employee : Person
{
    public ICollection<Dependent> Dependents { get; set; } = new List<Dependent>();
}

public class Person
{
    [Key]
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Вот так выглядит мой класс DbContext для доступа к моей базе данных:

public class AppDbContext : DbContext, IAppDbContext
{
    public AppDbContext(DbContextOptions options) : base(options)
    {
    }

    public AppDbContext()
    {
    }

    public virtual DbSet<Employee> Employees { get; set; }

    public virtual DbSet<Pay> PayEntries { get; set; }

    public virtual DbSet<Dependent> Dependents { get; set; }
}

А вот некоторые подходящие методы из моего EmployeeService класса.Это класс, который использует мой контроллер:

    public ICollection<EmployeeDto> GetAllEmployees()
    {
        return _dbContext.Employees.Select(e => e).ToList().Select(e => e.ToDto()).ToList();
    }

    public EmployeeDto GetEmployee(int id)
    {
        var employee = _dbContext.Employees.FirstOrDefault(e => e.Id == id);

        if (employee == null)
            throw new Exception("Employee does not exist");

        return employee.ToDto();
    } 

Теперь моя проблема в том, что мой список иждивенцев не заполняется.Я каждый раз получаю пустой массив из моего DbContext, и я не знаю почему.Оба метода GetAllEmployees и GetEmployee всегда возвращают пустой массив зависимостей (обратите внимание, что это не связано с этим методом ToDto(). Я убедился, что до достижения этой точки зависимости пустые).

Вот скриншот таблиц базы данных, подтверждающий, что Анакин должен иметь одну зависимую (я добавлю Лейю позже)

enter image description here

Но я просто получаюэто обратно:

{
    "dependents": [],
    "id": 1,
    "firstName": "Anakin",
    "lastName": "Skywalker"
},

1 Ответ

0 голосов
/ 14 декабря 2018

вам нужно добавить .Include(x => x.Dependents)

return _dbContext.Employees.Include(x => x.Dependents).ToList();

PS: попробуйте не использовать оператор .Select, поскольку нарушает включение.

Советую использоватьпреобразователь для отображения исходного класса в целевой класс dto.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...