Я могу добавить ровно одну новую запись с DbContext.SaveChanges()
. Если я добавлю еще одну, предыдущая запись будет перезаписана.
Вот мой DbContext
экземпляр:
public class TodoRepository : DbContext
{
public TodoRepository(DbContextOptions<TodoRepository> options) : base(options)
{
}
public DbSet<TodoModel> Todos { get; set; }
public List<TodoModel> GetTodos () => Todos.Local.ToList<TodoModel>();
}
и мой контроллер:
public class TodoController : Controller
{
private readonly ILogger<TodoController> _logger;
private readonly TodoRepository _repo;
public TodoController(ILogger<TodoController> logger, TodoRepository repo)
{
_logger = logger;
_repo = repo;
}
[HttpGet]
public IActionResult Index()
{
Console.WriteLine($"Number of items: {_repo.GetTodos().Count}");
return View(_repo.GetTodos());
}
[HttpPost]
public IActionResult Index(string todo) {
Console.WriteLine(Request.Form["NewTodo"]);
_repo.Add(new TodoModel() {Name = Request.Form["NewTodo"]});
_repo.SaveChanges(true);
return Index();
}
}
и моя страница Razor:
@model List<TodoModel>
<form method="post" asp-controller="Todo">
<div class="text-center">
<h1 class="display-4">Todo List</h1>
<div class="todo-container">
@foreach (var item in ViewData.Model)
{
<div class="todo-item">
<input type="checkbox" name="IsComplete" value="IsComplete" checked="@item.IsComplete"/>
<label for="isComplete">@item.Name</label>
</div>
}
</div>
</div>
<div class="text-center">
<p>Add some todos here:</p>
<input type="text" name="NewTodo" />
<button type="submit">Create</button>
</div>
</form>
для полноты, моя модель Todo:
public class TodoModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool CompletionStatus { get; set; }
public bool IsComplete { get => CompletionStatus; }
override public string ToString() {
return $"Todo {Id}: {Name}, {(CompletionStatus ? "Completed" : "Not Completed")}";
}
}
Когда я добавляю новую форму в свою форму и нажимаю "Отправить", я могу зарегистрировать элемент. Тем не менее, он заменяет предыдущий элемент. Похоже, что код добавляет, а затем сохраняет изменения в базе данных. Почему это происходит?