MVC SQLite: ОБНОВЛЕНИЕ не работает. Синтаксис?

#c# #sqlite

#c# #sqlite

Вопрос:

Я программирую библиотечное приложение на MVC. Я впервые использую подключение к базе данных и Dapper. MVC для SQLite

Моя база данных выглядит так :

  • Имя таблицы: SubscriberBook
  • Столбцы: SubscriberID / BookID / Дата заимствования / Дата возврата

Когда заимствование создается, для ReturnDate устанавливается значение null .

Когда подписчик возвращает книгу, я хочу сохранить другие данные и ОБНОВИТЬ ReturnDate с текущей датой, например DateTime.now .Галочки.

Модель :

 public class SubscriberBookEntity
{
    public int BookId { get; set; }
    public int SubscriberId { get; set; }
    public DateTime BorrowDate { get; set; }
    public DateTime ReturnDate { get; set; }
}
  

Контроллер, вызовите Create Update :

 [HttpPost]
    public ActionResult SubscriberBorrow(Borrow borrow)
    {
        SubscriberEntity subscriberEntity = new SubscriberEntity();
        SubscriberBookEntity subscriberBookEntity = new SubscriberBookEntity();
        List<SubscriberBookEntity> subscriberBookEntityList = new List<SubscriberBookEntity>();
        subscriberBookEntityList = Manager.GetAllBorrow();

            foreach (Book borrowBook in borrow.Library.BookList)
            {
                if (borrowBook.IsChecked amp;amp; Error == false)
                {
                    subscriberBookEntity.DateEmprunt = DateTime.Now;
                    subscriberBookEntity.DateRetour = new DateTime();

                    Manager.CreateBorrow(borrow.SelectedSubscriberId, borrowBook.Id, subscriberBookEntity.DateEmprunt, subscriberBookEntity.DateRetour);
                    subscriberBookEntityList = Manager.GetAllBorrow();
                }
            }

        if (borrow.Button.Equals("Return"))
        {
            foreach (Book borrowBook in borrow.Library.BookList)
            {
                if (borrowBook.IsChecked)
                {
                    subscriberBookEntity.ReturnDate = DateTime.Now;
                    Manager.UpdateBorrow(subscriberBookEntity);
                }
            }
  

Создать :

 public static void CreateBorrow(int subscriberId, int bookId, DateTime dateEmprunt, DateTime dateRetour)
    {
        using (var connection = new SQLiteConnection(GetConnectionString()))
        {
            connection.Execute("INSERT INTO SubscriberBook (SubscriberId, BookId, DateEmprunt) VALUES (@subscriberId, @bookId, @dateEmprunt)",
            new
            {
                SubscriberId = subscriberId,
                BookId = bookId,
                DateEmprunt = dateEmprunt.Ticks,
            });
        }
    }
  

Получить :

 public static List<SubscriberBookEntity> GetAllBorrow()
    {
        using (var connection = new SQLiteConnection(GetConnectionString()))
        {
            return connection.Query<SubscriberBookEntity>("SELECT BookId, SubscriberId FROM SubscriberBook").ToList();
        }
    }
  

Обновить :

 public static void UpdateBorrow(SubscriberBookEntity subscriberBookEntity)
    {
        using (var connection = new SQLiteConnection(GetConnectionString()))
        {
            if(subscriberBookEntity != null)
            {
                connection.Execute("UPDATE SubscriberBook SET ReturnDate = @returnDate WHERE BookId = @bookId AND SubscriberId = @subscriberId",
                new
                {
                    returnDate = subscriberBookEntity.ReturnDate.Ticks,
                    bookId = subscriberBookEntity.BookId,
                    subscriberId = subscriberBookEntity.SubscriberId,
                });
            }
        }
    }
  

Я не получил ошибки, но в моей базе данных ничего не изменилось. Значение ReturnBorrow по-прежнему равно нулю.

Спасибо за ваше терпение и вашу помощь.

Комментарии:

1. Вы используете Dapper? Можете ли вы получить возвращаемое значение метода Execute и проверить, отличается ли оно от нуля?

2. Как subscriberBookEntity создается и заполняется?

3. Привет, извините за опоздание, но я больше не могу запустить свое приложение. IIS Express не запускается… Я обновил свой пост с помощью метода, который заполнил subscriberBookEntity . И да, я использую dapper.

Ответ №1:

После некоторых исследований мой код в контроллере для «return» не использует правильные переменные.

После исправлений :

 if (borrow.Button.Equals("Retourner"))
        {
            foreach (SubscriberBookEntity subscriberBookEntity in subscriberBookEntityList)
            {
                foreach(Book borrowBook in borrow.Library.BookList)
                {
                    if(borrowBook.IsChecked amp;amp; borrowBook.Id == subscriberBook.BookId amp;amp; subscriberBook.SubscriberId == borrow.SelectedSubscriberId)
                    {
                        subscriberBook.DateRetour = DateTime.Now;
                        Manager.UpdateBorrow(subscriberBook);
                    }
                }
            }

            List<SubscriberBookEntity> SubscriberBookEntityList = Manager.GetAllBorrow();

        }
  

Спасибо @Steve и @Patrick Hofman за их советы.