Ядро EF В базе данных памяти не сохраняет столбец объекта ICollection

#c# #asp.net-core #entity-framework-core #in-memory-database

Вопрос:

Я читал, что база данных InMemory с ядром EF имеет ограничения, и рассматривал возможность перехода на sqlite для разработки, однако я хотел знать, является ли такое поведение ограничением базы данных InMemory или это я. Я попытался прочитать документацию, но не могу найти материала, в котором бы это прямо упоминалось. У меня есть следующее:

     // Startup
    services.AddDbContext<StudentResultsContext>(opt =>
                                               opt.UseInMemoryDatabase("StudentResultsList"));
    // context
    public class StudentResultsContext : DbContext
    {
        public StudentResultsContext(DbContextOptions<StudentResultsContext> options)
            : base(options)
        {
        }

        public DbSet<StudentResults> StudentResultsList { get; set; }
    }

    // classes
    public class StudentResults
    {
        public long ID { get; set; }
        public long ParentId { get; set; }
        public string Name { get; set; }
        public ICollection<ExamScores> Results { get; set; }
    }

    public class ExamScores
    {
        public long ID{ get; set; }
        public long StudentId { get; set; }
        public Exam ExamType { get; set; }
        
        public double Score { get; set; }
    }
    // controller
    [HttpPost]
    public async Task<ActionResult<StudentResults>> PostStudentResults(StudentResults studentResults)
    {
        _context.StudentResultsList.Add(studentResults);
        await _context.SaveChangesAsync();

        return CreatedAtAction(nameof(GetStudentResults), new { id = studentResults.ID }, studentResults);
    }
 

Results сохраняется как null в базе данных, даже если в возврате с поста утверждается, что они были созданы, вот так

The post
введите описание изображения здесь

What comes back from get
введите описание изображения здесь

Это то, что я сделал, или проблема с базой данных памяти?

Комментарии:

1. Вы должны публиковать все свои занятия, а не только один. Нам нужно посмотреть, как вы настраиваете отношения. И, пожалуйста, не используйте изображения, если вы хотите получить некоторую помощь.

2. Я добавил другой класс и конфигурацию при запуске. Что не так с изображениями? Это было просто для того, чтобы показать, как я, по-видимому, опубликовал сообщение StudentResults с Results , но затем получил то же StudentResults самое, что и null Results

3. Попробуйте удалить идентификатор и идентификатор студента из вашего json

4. Я попытался удалить их из тела моего запроса на публикацию, и это привело примерно к тому же поведению — Results заполнено при публикации, но все равно равно равно нулю при получении

Ответ №1:

Я предполагаю, что вы ничего не делаете для загрузки связанных данных и, таким образом, получаете null за Results .

Попробуйте получить сохраненную сущность с context.StudentResultsList.Include(s => s.Results) помощью .

Проверьте Загрузку связанных данных для других стратегий.

Комментарии:

1. Идеально! Добавив это, чтобы добиться того, чего я искал. Спасибо вам за ссылку на соответствующую документацию, чтобы я также продолжал изучать фреймворк.