首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当下一次请求我的API (InMemoryDb)时,我的类对象消失了。

当下一次请求我的API (InMemoryDb)时,我的类对象消失了。
EN

Stack Overflow用户
提问于 2019-06-20 02:43:57
回答 1查看 43关注 0票数 0

我在创建应用程序接口时遵循了this tutorial,并遇到了一个我难以解决的问题:

我有两个模型类: Todo和TodoItem。

我在Todo类中放入了一个TodoItems的ICollection。

当我要从API GET请求返回Todo时,它在第一次工作,但一旦发送第二个请求,TodoItem集合就会被覆盖,并通过Todo的构造函数再次声明。

为了向TodoItemId).

  • Storing (modelBuilder.Entity<>()...).

中的OnModelcreating()添加一些代码,(modelBuilder.Entity<>()...).

  • 尝试对Todo中的TodoItemIds列表添加一些批注(TodoItemIds type =具有Id和TodoItemId).
  • Storing Todo的新类以及TodoItem.
  • Tried中的TodoContext Todo和TodoId

这是控制器代码,我不知道如何很好地粘贴它...:

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不应该消失。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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实例上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56674025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档