我在创建应用程序接口时遵循了this tutorial,并遇到了一个我难以解决的问题:
我有两个模型类: Todo和TodoItem。
我在Todo类中放入了一个TodoItems的ICollection。
当我要从API GET请求返回Todo时,它在第一次工作,但一旦发送第二个请求,TodoItem集合就会被覆盖,并通过Todo的构造函数再次声明。
为了向TodoItemId).
中的OnModelcreating()添加一些代码,(modelBuilder.Entity<>()...).
这是控制器代码,我不知道如何很好地粘贴它...:
TodoController
public TodoController(TodoContext context){
_context = context;
if (_context.TodoItems.Count() == 0)
{
// Create a new TodoItem if collection is empty,
// which means you can't delete all TodoItems.
_context.Todos.Add(new Todo(new TodoItem("Walk the dog")));
_context.SaveChanges();
}
}
// GET: api/Todo
[HttpGet]
public async Task<ActionResult<List<Todo>>> GetTodo()
{
return await _context.Todos.ToListAsync();
}
TodoContext
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Todo>()
.HasMany(t => t.TodoItems);
base.OnModelCreating(modelBuilder);
}
第一个Get-Request-Response
[
{
"id": "34bfd453-8f06-4733-a4b6-1fb209327a8d",
"todoItems": [
{
"id": 1,
"name": "Walk the dog",
"isComplete": false,
"todoId": "34bfd453-8f06-4733-a4b6-1fb209327a8d"
}
]
}
]
第二个Get-Request-Response
[
{
"id": "34bfd453-8f06-4733-a4b6-1fb209327a8d",
"todoItems": []
}
]
todoItems-list不应该消失。
发布于 2019-06-20 03:04:51
您需要从数据库加载Todo.TodoItems
。
[HttpGet]
public async Task<ActionResult<List<Todo>>> GetTodo()
{
return await _context.Todos.Include(t => t.TodoItems).ToListAsync();
}
上面的代码使用热切加载,Include(t => t.TodoItems)
,但有不同的方式来load related data使用EF核心。
第一次出现TodoItem
的原因是因为它刚被添加到TodoContext
中,所以它仍然加载在那个特定的TodoContext
实例上。
https://stackoverflow.com/questions/56674025
复制相似问题