EF Core内存数据库无法保存ICollection对象列

3

我读到EF Core的InMemory数据库有一些限制,考虑在开发时转向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,即使从 post 返回的结果声称它们已被创建,就像这样:

Post返回的内容: enter image description here

Get返回的内容: enter image description here

这是我做错了什么还是 InMemory 数据库的问题?


你需要发布所有的类,而不仅仅是一个。我们需要看到你如何配置关系。如果你想得到帮助,请不要使用图片。 - Serge
我在Startup中添加了另一个类和配置。图片有什么问题吗?这只是为了展示我如何发布带有“Results”的“StudentResults”,但是获取相同的“StudentResults”时,“Results”为空。 - amdorsey12
尝试从你的JSON中删除id和studentId。 - Serge
我尝试从我的POST请求正文中删除它们,结果行为大致相同——在POST上填充了“Results”,但在GET上仍为空。 - amdorsey12
1个回答

2

我猜你没有加载相关数据,因此 Results 返回了 null

尝试使用 context.StudentResultsList.Include(s => s.Results) 获取已保存的实体。

查看加载相关数据以获取其他策略。


太棒了!把这个加进去就能实现我想要的功能了。谢谢你提供相关文档,让我能继续学习这个框架。 - amdorsey12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接