DbContext.SaveChanges () перезаписывает предыдущую запись - PullRequest
0 голосов
/ 23 апреля 2020

Я могу добавить ровно одну новую запись с 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")}";
    }
  }

Когда я добавляю новую форму в свою форму и нажимаю "Отправить", я могу зарегистрировать элемент. Тем не менее, он заменяет предыдущий элемент. Похоже, что код добавляет, а затем сохраняет изменения в базе данных. Почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...