EntityFramework Core с отношением «один ко многим» всегда возвращает пустую коллекцию - PullRequest
0 голосов
/ 10 июля 2020

Я использую интерфейс IEntityTypeConfiguration для настройки сущностей. Так, например, у меня есть 2 таблицы с именами: Студенты / Курсы.

Есть конфигурация таблиц:

Курсы :

builder.HasMany(x => x.Students).WithOne().HasForeignKey(x => x.CourseId);

Студенты :

builder.HasOne(x => x.Course).WithMany().HasForeignKey(x => x.CourseId);

Следующим шагом является создание теста для проверки правильности загрузки данных. У меня есть репозиторий, который преобразует объект в модель, но сначала я хочу протестировать его вручную с помощью моего контекста.

Я создал курс и список студентов, есть студенты (EntityManager добавляет поддельные данные в Context и сохраните его), на самом деле по умолчанию создается 100 сущностей:

var students = await EntityManager.CreateManyAsync<Student>(
                x => x.CourseId = course.Id);

Затем я просто ищу курс, включаю студентов и тестирую его через FluentAssertions.

var set = TestDatabase.Context.Set<Course>();
var course = await set.Include(x => x.Students).FirstAsync(x => x.Id == course.Id);
course.Students.Should().NotBeEmpty();

Сущность здесь , но коллекция пуста (но не равна нулю, поскольку я ее не инициализировал).

Для модульных тестов я использую фактический Context и InMemoryDatabase.

Коллекция Entity:

public virtual ICollection<Student> Students { get; set; }

Что не так?

PS Ошибок в EntityManager нет, идентификаторы отношений установлены правильно.

1 Ответ

0 голосов
/ 10 июля 2020

Я удалил отношение из таблицы «Студенты» и изменил WithOne () в конфигурации курса на WithOne (x => x.Course), и теперь он работает полностью. Спасибо @ Uriil

...