在MVC单页应用模板中PUT创建新对象?为什么?

时间:2013-03-01 02:23:58

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在从VS模板(来自这里http://www.asp.net/single-page-application)查看MVC4的单页Web应用程序,看起来ToDoLists的PUT操作正在创建一个新的ToDoList - 为什么会这样? DTO类定义中的代码:

public TodoList ToEntity()
        {
            TodoList todo = new TodoList
            {
                Title = Title,
                TodoListId = TodoListId,
                UserId = UserId,
                Todos = new List<TodoItem>()
            };
            foreach (TodoItemDto item in Todos)
            {
                todo.Todos.Add(item.ToEntity());
            }

            return todo;
        } 

来自控制器:

public HttpResponseMessage PutTodoList(int id, TodoListDto todoListDto)
{           
    TodoList todoList = todoListDto.ToEntity();
    db.Entry(todoList).State = EntityState.Modified;
    db.SaveChanges();
    return Request.CreateResponse(HttpStatusCode.OK);
}

为了更新记录,我们创建了一个新记录?我对这是如何工作有点困惑 - 任何澄清都会很棒。

1 个答案:

答案 0 :(得分:1)

在此示例中,控制器正在将TodoListDto对象转换为TodoList对象,这是数据库对象类型。由于DTO对象从网页返回,因此必须将其更改为适当的类型,以便Entity Framework可以将其附加到DbSet并保存更改。

ToEntity实际上并没有在数据库中创建新记录,它会创建一个新的TodoList实例,然后将其附加到数据库中进行修改。