MVC + SQLite: ОБНОВЛЕНИЕ не работает. Синтаксис? - PullRequest
0 голосов
/ 15 апреля 2019

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

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

  • Название таблицы: SubscriberBook
  • Столбцы: SubscriberId / BookId / BorrowDate / ReturnDate

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

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

Модель:

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 && 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 Ответ

0 голосов
/ 16 апреля 2019

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

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

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

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

        }

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

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