• 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

Object Storage Arubacloud
0 głosów
216 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 (35,880 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 (35,880 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 109 wizyt
pytanie zadane 7 grudnia 2020 w C# przez dz3101 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 304 wizyt
0 głosów
0 odpowiedzi 93 wizyt
pytanie zadane 22 stycznia 2020 w C# przez michael2424 Nowicjusz (140 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...