• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego metoda add nie wysyła nic do bazy danych ASP.NET MVC

0 głosów
383 wizyt
pytanie zadane 13 stycznia 2023 w C# przez chrystian Gaduła (4,780 p.)

Model przechodzi walidacje lecz nie zostaje wysłany do bazy dancyh nie mam pojęcia gdzie jest błąd
Funckja tworząca 

    public IActionResult Create()
        {
            return View();
        }
        [HttpPost]
        //Bind które pola mają być wysłane 
        public IActionResult Create([Bind("Name,BookStoreLogo,Description")]BookStore bookStore)
        {
            //sprawdza Validatons
            if (ModelState.IsValid)
            {
                _context.Add(bookStore);
                return RedirectToAction(nameof(Index));
            }
            return View(bookStore);
        }
    }

Model 



    public class BookStore
    {
        [Key]
        public int? Id { get; set; }

        [Display(Name = "Bookstore Logo")]
        [Required(ErrorMessage = "BookStore logo is required")]
        public string BookStoreLogo { get; set; }

        [Display(Name = "Name")]
        [Required(ErrorMessage = "Bookstore name is required")]
        public string Name { get; set; }

        [Display(Name = "Description")]
        [Required(ErrorMessage = "Bookstore description is required")]
        public string Description { get; set; }

        //Relations
        public List<BookStore_Book>? BookStore_Books { get; set; }
    }

Dodanie do bazy dancyh 

   private readonly BookStoreDbContext _context;
      
        public BookStoresController(BookStoreDbContext context)
        {
            _context = context;
        }
        public void Add(BookStore bookStore)
        {
            _context.BookStores.Add(bookStore);
            _context.SaveChanges();
        }

 

1 odpowiedź

0 głosów
odpowiedź 14 stycznia 2023 przez jankustosz1 Nałogowiec (36,960 p.)
wybrane 16 stycznia 2023 przez chrystian
 
Najlepsza
_context.Add(bookStore);

Jeżeli _context jest typu BookStoreDbContext to musisz wykonać SaveChanges

Teraz zauważyłem że masz w sumie 2 kontrolery. Opisz może w jakich plikach jest jaki kod i wklej łacznie z definicją klasy

komentarz 15 stycznia 2023 przez chrystian Gaduła (4,780 p.)
edycja 15 stycznia 2023 przez chrystian

BookStoresController 

using Microsoft.AspNetCore.Mvc;
using ProjectASP.NET_14040.Data;
using ProjectASP.NET_14040.Models;

namespace ProjectASP.NET_14040.Controllers
{
    public class BookStoresController : Controller
    {
        private readonly BookStoreDbContext _context;
      
        public BookStoresController(BookStoreDbContext context)
        {
            _context = context;
        }
        public void Add(BookStore bookStore)
        {
            _context.BookStores.Add(bookStore);
            _context.SaveChanges();
        }
        public void DeleteBookStore(int id)
        {
            var result = _context.BookStores.FirstOrDefault(n => n.Id == id);
            _context.BookStores.Remove(result);
            _context.SaveChanges();
        }
        public IEnumerable<BookStore> getAll()
        {
            var result = _context.BookStores.ToList();
            return result;
        }
        public BookStore GetByid(int id)
        {
            var result = _context.BookStores.FirstOrDefault(n => n.Id == id);
            return result;
        }
        public BookStore Update(int id, BookStore newbookStore)
        {
            _context.Update(newbookStore);
            _context.SaveChanges();
            return newbookStore;

        }
      
        public IActionResult Index()
        {
            var data = getAll();
            return View(data);
        }
        //Get Request: BookStore/Create

        public IActionResult Create()
        {
            return View();
        }
        [HttpPost]
        //Bind które pola mają być wysłane 
        public IActionResult Create([Bind("Name,BookStoreLogo,Description")]BookStore bookStore)
        {
            //sprawdza Validatons
            if (ModelState.IsValid)
            {
                _context.Add(bookStore);
                return RedirectToAction(nameof(Index));
            }
            return View(bookStore);
        }
        //Get: Bookstore/Details/id
        public IActionResult Details(int id)
        {
            var bookstoreDetails = GetByid(id);
            if (bookstoreDetails == null)
            {
                return View("NotFound");
             }
            return View(bookstoreDetails);
        }
        //Get Request: BookStore/Edit

        public IActionResult Edit(int id)
        {
            var bookstoreDetails = GetByid(id);
            if (bookstoreDetails == null)
            {
                return View("NotFound");
            }
            return View(bookstoreDetails);
        }
        [HttpPost]
        //Bind które pola mają być edytowane 
        public IActionResult Edit([Bind("Id,Name,BookStoreLogo,Description")] BookStore bookStore,int id)
        {
            //sprawdza Validatons
            if (ModelState.IsValid)
            {
                Update(id,bookStore);
                return RedirectToAction(nameof(Index));
            }
            return View(bookStore);
        }
        //Get Request: BookStore/Delete
        public IActionResult Delete(int id)
        {
            var bookstoreDetails = GetByid(id);
            if (bookstoreDetails == null)
            {
                return View("NotFound");
            }
            return View(bookstoreDetails);
          
        }
        [HttpPost, ActionName("Delete")]
        //Bind które pola mają być wysłane 
        public IActionResult DeleteConfirmed(int id)
        {
            var bookstoreDetails = GetByid(id);
            if (bookstoreDetails == null)
            {
                return View("NotFound");
            }
            DeleteBookStore(id);
          
            return RedirectToAction(nameof(Index));
            
            
        }
    }
}

Funkcja add przypadkiem nie robi savechanges
 

public void Add(BookStore bookStore)
     {
         _context.BookStores.Add(bookStore);
         _context.SaveChanges();
     }

Tworzenie bazy 


using Microsoft.EntityFrameworkCore;
using ProjectASP.NET_14040.Models;

namespace ProjectASP.NET_14040.Data
{
    public class BookStoreDbContext : DbContext
    {
        public BookStoreDbContext(DbContextOptions<BookStoreDbContext> options): base(options)
        {

        }
        //Joining tablica dla BookStore_Book
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //Wskazanie dla translatora 
            modelBuilder.Entity<BookStore_Book>().HasKey(bs =>
            new
            {
                bs.BookId,
                bs.BookStoreId
            });
            //Generowanie defoltowych wskazan dla tablicy
            modelBuilder.Entity<BookStore_Book>().HasOne(b => b.Book).WithMany(bs => bs.BookStore_Books).HasForeignKey(b => b.BookId);
            modelBuilder.Entity<BookStore_Book>().HasOne(b => b.BookStore).WithMany(bs => bs.BookStore_Books).HasForeignKey(b => b.BookStoreId);
            base.OnModelCreating(modelBuilder);
        }
        //Określanie nazwy tablic
        public DbSet<Book> Books { get; set; }
        public DbSet<BookStore> BookStores { get; set; }
       
        public DbSet<BookStore_Book> BookStores_Books { get; set; }

        public DbSet<Author> Authors { get; set; }
     
    }
}

Inicjalizacja
 

 public static void Seed(IApplicationBuilder applicationBuilder)
        {
            using (var serviceScope = applicationBuilder.ApplicationServices.CreateScope())
            {
                //odniesienie do bazy danych
                var context = serviceScope.ServiceProvider.GetService<BookStoreDbContext>();
                // czy istnieje
                context.Database.EnsureCreated();

                //BookStore
                if (!context.BookStores.Any())
                {
                    context.BookStores.AddRange(new List<BookStore>()
                    {
                        new BookStore()
                        {
                            Name = "BookStore 1",
                            BookStoreLogo = "https://images.pexels.com/photos/626986/pexels-photo-626986.jpeg?auto=compress&cs=tinysrgb&w=400",
                            Description = "This is the description for first BookStore "
                        },
                            new BookStore()
                        {
                            Name = "BookStore 2",
                            BookStoreLogo = "https://images.pexels.com/photos/1907785/pexels-photo-1907785.jpeg?auto=compress&cs=tinysrgb&w=400",
                            Description = "This is the description for second BookStore "
                        }
                    }

                        );
                    context.SaveChanges();
                }

Model 


    public class BookStore
    {
        [Key]
        public int? Id { get; set; }

        [Display(Name = "Bookstore Logo")]
        [Required(ErrorMessage = "BookStore logo is required")]
        public string BookStoreLogo { get; set; }

        [Display(Name = "Name")]
        [Required(ErrorMessage = "Bookstore name is required")]
        public string Name { get; set; }

        [Display(Name = "Description")]
        [Required(ErrorMessage = "Bookstore description is required")]
        public string Description { get; set; }

        //Relations
        public List<BookStore_Book>? BookStore_Books { get; set; }
    }
}

View Create 

@*define model*@
@model BookStore

@*Define ViewData*@

@{
	ViewData["Title"] = "Add a new Bookstore";
}

@*Code*@
<div class="row text">
    <div class="col-md-8 offset-2">
        <p>
            <h1>Add a New BookStore</h1>
        </p>
        <div class="row">
            <div class="col-md-8 offset-2">
                <form asp-action="Create">
                    <div asp-validation-summary="ModelOnly" class="text-danger"></div>

                    <div class="form-group text-center">
                        <img id="BookStoreLogoPreview"  class="border-info rounded-circle" style="max-width: 150px" />
                    </div>
                    <div class="form-group">
                        <label asp-for="BookStoreLogo" class="control-label"></label>
                        <input asp-for="BookStoreLogo" class="form-control" />
                        <span asp-validation-for="BookStoreLogo" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="Name" class="control-label"></label>
                        <input asp-for="Name" class="form-control" />
                        <span asp-validation-for="Name" class="text-danger"></span>
                    </div>
                    <div class="form-group">
                        <label asp-for="Description" class="control-label"></label>
                        <input asp-for="Description" class="form-control" />
                        <span asp-validation-for="Description" class="text-danger"></span>
                    </div>

                    <div class="form-group">
                        <input type="submit" value="Create" class="btn btn-outline-success" />
                        <a class="btn btn-outline-danger" asp-action="Index">Back</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

@section Scripts{ 
    <script>
        $(document).ready(function () {
            var output = document.getElementById('BookStoreLogoPreview');
            output.src = $("#BookStoreLogo").val();
        })
        $("#BookStoreLogo").on("change", function () {
            var output = document.getElementById('BookStoreLogoPreview');
            output.src = $(this).val();
        })
    </script>
}

Bo submit w server explorere pokazuje się coś takiego 


Wysłąnie danych i Framework.core pokazuje added 

komentarz 16 stycznia 2023 przez jankustosz1 Nałogowiec (36,960 p.)
W metodzie Create wykonujesz Add z obiektu typu BookStoreDbContext. On nie wykonuje SaveChanges automatycznie. Chyba chciałeś wywołać metodę Add która zefiniowałeś lokalnie w klasie
komentarz 16 stycznia 2023 przez chrystian Gaduła (4,780 p.)
omg faktycznie

Podobne pytania

0 głosów
0 odpowiedzi 152 wizyt
pytanie zadane 7 grudnia 2020 w C# przez dz3101 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 452 wizyt
0 głosów
0 odpowiedzi 130 wizyt
pytanie zadane 22 stycznia 2020 w C# przez michael2424 Nowicjusz (140 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...