#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 в базе данных, даже если в возврате с поста утверждается, что они были созданы, вот так
Это то, что я сделал, или проблема с базой данных памяти?
Комментарии:
1. Вы должны публиковать все свои занятия, а не только один. Нам нужно посмотреть, как вы настраиваете отношения. И, пожалуйста, не используйте изображения, если вы хотите получить некоторую помощь.
2. Я добавил другой класс и конфигурацию при запуске. Что не так с изображениями? Это было просто для того, чтобы показать, как я, по-видимому, опубликовал сообщение
StudentResults
сResults
, но затем получил то жеStudentResults
самое, что и nullResults
3. Попробуйте удалить идентификатор и идентификатор студента из вашего json
4. Я попытался удалить их из тела моего запроса на публикацию, и это привело примерно к тому же поведению —
Results
заполнено при публикации, но все равно равно равно нулю при получении
Ответ №1:
Я предполагаю, что вы ничего не делаете для загрузки связанных данных и, таким образом, получаете null
за Results
.
Попробуйте получить сохраненную сущность с context.StudentResultsList.Include(s => s.Results)
помощью .
Проверьте Загрузку связанных данных для других стратегий.
Комментарии:
1. Идеально! Добавив это, чтобы добиться того, чего я искал. Спасибо вам за ссылку на соответствующую документацию, чтобы я также продолжал изучать фреймворк.