内存数据库中的 EF Core 未保存 ICollection object 列
EF Core In Memory Database not saving ICollection object column
我了解到使用 EF Core 的 InMemory 数据库存在局限性,并且正在考虑转向 sqlite 进行开发,但是,我想知道这种行为是 InMemory 数据库的局限性还是我的局限性。我已尝试阅读文档,但找不到 material 明确提及这一点。我有以下内容:
// 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 中的 return 声称它们是创建的,就像这样
The post
What comes back from get
这是我做的还是 InMemory Databse 的问题?
我猜你没有做任何加载相关数据的事情,因此你得到 null
for Results
.
尝试使用 context.StudentResultsList.Include(s => s.Results)
获取保存的实体。
检查 Loading Related Data 其他策略。
我了解到使用 EF Core 的 InMemory 数据库存在局限性,并且正在考虑转向 sqlite 进行开发,但是,我想知道这种行为是 InMemory 数据库的局限性还是我的局限性。我已尝试阅读文档,但找不到 material 明确提及这一点。我有以下内容:
// 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 中的 return 声称它们是创建的,就像这样
The post
What comes back from get
这是我做的还是 InMemory Databse 的问题?
我猜你没有做任何加载相关数据的事情,因此你得到 null
for Results
.
尝试使用 context.StudentResultsList.Include(s => s.Results)
获取保存的实体。
检查 Loading Related Data 其他策略。