微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF Core In Memory Database 不保存 ICollection 对象列

如何解决EF Core In Memory Database 不保存 ICollection 对象列

我已经读到带有 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数据库中保存为空值,即使从创建它们的帖子声明返回,就像这样

The post

enter image description here

What comes back from get

enter image description here

这是我做的还是 InMemory Databse 的问题?

解决方法

我猜您没有做任何事情来加载相关数据,因此您将获得 nullResults

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

检查 Loading Related Data 以了解其他策略。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。