C# CRUD проблема - панель ОБНОВЛЕНИЕ не работает, как я ожидаю - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь создать программу, которая поддерживает полную CRUD, но ... Часть обновления не работает

   using System;
        using System.Collections.Generic;
        using System.Text;

        namespace MyLibary.Models
        {
            class UpdateBooks
            {
                public void updateCompBook()
                {
                    using (var bookUp = new BookContext())
                    {
                        // This is a full CRUD program that saves books in a databases
                        // I have some problems with the Update part..
                        ShowFutureBooks bookShow = new ShowFutureBooks(); 
                        bookShow.FutureBooks(); // shows all three books

                        Console.WriteLine("Type the id of the book you want to update"); // currently there is 3 books saved in the database

                        int id = Int32.Parse(Console.ReadLine()); // lets say i that i choose the if 1

                        // what i would like to do and cannot, is that get only the book that has id 1 so that i can update it


                        Console.WriteLine("Update the book according to following: BookName, BookAuthor, BookSummary");



                        BooksToRead bU = new BooksToRead()
                        {
                            BookName = Console.ReadLine()
                          , BookAuthor = Console.ReadLine()
                          , BookSumary = Console.ReadLine()
                        }; 
                        bookUp.BooksToRead.Add(bU);
                        Console.WriteLine("Press enter to save changes.");
                        Console.ReadLine();
                        bookUp.SaveChanges();
                        Console.WriteLine("The bok has been updated!");

                    }
                }
            }
        }

Я хотел бы взять идентификатор книги из базы данных, а затем обновить эту спецификацию c книга но она не работает.

Ответы [ 3 ]

0 голосов
/ 07 марта 2020

Когда вы хотите обновить, вы должны сначала загрузить книгу, которую хотите отредактировать

var bookToEdit = bookUp.BooksToRead.Find( id );

Теперь измените свойства, которые вам нравятся

bookToEdit.BookName = Console.ReadLine();
...

и когда вы закончите редактирование сохранить изменения с помощью

bookUp.SaveChanges();
0 голосов
/ 07 марта 2020

При добавлении crud в ваше приложение я бы рекомендовал поместить это в один класс. Этот класс будет заканчиваться именем repository (посмотрите, вы найдете много примеров).

public class BookRepository
{
    /// <summary>
    /// This method will update the entity by using the bookId.
    /// </summary>
    /// <param name="bookId">The is of the book</param>
    /// <param name="name">The book Name (to be updated)</param>
    /// <param name="author">The book author (to be updated)</param>
    /// <param name="summary">The book summary (to be updated)</param>
    public void Update(int bookId, string name, string author, string summary)
    {
        var _context = new BookContext();
        var myBook = _context.Books.First(book => g.bookId == bookId);//finds the first entity with the given bookId
        myBook.name = name;//this for all variables
        _context.SaveChanges();//save the changes to the database.
    }
}

Вызов метода будет выглядеть примерно так: new BookRepository.Update(0, "", "", "");.

Пожалуйста Обратите внимание, что выше приведен простой пример. Потребуются некоторые изменения, чтобы он работал с вашей конкретной моделью данных c. См. по следующей ссылке , чтобы узнать больше о шаблоне хранилища.

0 голосов
/ 07 марта 2020

Этот код

    BooksToRead bU = new BooksToRead()
    {
        BookName = Console.ReadLine()
        , BookAuthor = Console.ReadLine()
        , BookSumary = Console.ReadLine()
    }; 
    bookUp.BooksToRead.Add(bU);

создает новый объект BooksToRead, а затем вы добавляете его в свой список. Это фактически выполнит вставку вместо обновления. Вы должны l oop просмотреть свой список и найти объект BooksToRead со вставленным идентификатором, а затем изменить его значения до сохранения в.

...