我正在从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);
}
为了更新记录,我们创建了一个新记录?我对这是如何工作有点困惑 - 任何澄清都会很棒。
答案 0 :(得分:1)
在此示例中,控制器正在将TodoListDto
对象转换为TodoList
对象,这是数据库对象类型。由于DTO对象从网页返回,因此必须将其更改为适当的类型,以便Entity Framework可以将其附加到DbSet并保存更改。
ToEntity
实际上并没有在数据库中创建新记录,它会创建一个新的TodoList
实例,然后将其附加到数据库中进行修改。