【问题标题】:EF Core In Memory Database not saving ICollection object column内存数据库中的 EF Core 未保存 ICollection 对象列
【发布时间】:2021-07-02 14:41:00
【问题描述】:

我已经读到带有 EF Core 的 InMemory Database 存在限制,并且正在考虑迁移到 sqlite 进行开发,但是,我想知道这种行为是 InMemory Database 的限制,还是我自己的限制。我已尝试阅读文档,但找不到明确提及这一点的材料。我有以下内容:

    // 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

What comes back from get

这是我做的事情还是 InMemory 数据库有问题?

【问题讨论】:

  • 您必须发布所有课程,而不仅仅是一个。我们需要看看你是如何配置关系的。如果您想获得帮助,请不要使用图片。
  • 我在 Startup 中添加了另一个类和配置。图像有什么问题?这只是为了展示我似乎如何使用Results 发布StudentResults,但随后获得相同的StudentResults 具有空Results
  • 尝试从你的json中删除id和studentId
  • 我尝试从我的帖子请求正文中删除这些内容,它导致了大致相同的行为 - Results 在帖子中填写但在获取时仍然为空

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


【解决方案1】:

我猜你没有做任何事情来加载相关数据,因此你得到了null for Results

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

查看Loading Related Data 了解其他策略。

【讨论】:

  • 完美!添加它以完成我正在寻找的东西。感谢您为我链接相关文档以继续学习该框架。
猜你喜欢
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多