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

ASP .Net błąd połączenia z bazą danych

Object Storage Arubacloud
0 głosów
109 wizyt
pytanie zadane 7 października 2020 w C# przez OlekS Początkujący (280 p.)

Hej, podczas tworzenia prostej strony która ma za zadanie wyświetlić z bazy danych liste filmów.

Ale po kompilacji wyskakuje błąd:

InvalidOperationException: Unable to resolve service for type 'Filmoteka.Repositiores.IFilmRepositiores' while attempting to activate 'Filmoteka.Controllers.HomeController'.

public class HomeController : Controller
    {
        private readonly IFilmRepositiores _filmotekaRepositiores;

        public HomeController(IFilmRepositiores filmotekaRepositiores)
        {
            _filmotekaRepositiores = filmotekaRepositiores;
        }

        // GET: HomeController
        public ActionResult Index()
        {
            return View(_filmotekaRepositiores.GetFilms());
        }

        // GET: HomeController/Details/5
        public ActionResult Details(int id)
        {
            return View(_filmotekaRepositiores.Get(1));
        }

        // GET: HomeController/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: HomeController/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(IFormCollection collection)
        {
            try
            {
                return RedirectToAction(nameof(Index));
            }
            catch
            {
                return View();
            }
        }

        // GET: HomeController/Edit/5
        public ActionResult Edit(int id)
        {
            return View(id);
        }

        // POST: HomeController/Edit/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(int id, FilmModel film)
        {

            _filmotekaRepositiores.Update(id, film);
                return RedirectToAction(nameof(Index));
        }

        // GET: HomeController/Delete/5
        public ActionResult Delete(int id)
        {
            return View(id);
        }

        // POST: HomeController/Delete/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Delete(int id, IFormCollection collection)
        {
            _filmotekaRepositiores.Delate(id);
                return RedirectToAction(nameof(Index));
        }
public class FilmRepositiores : IFilmRepositiores
    {
        private readonly FilmotekaContext _context;

        public FilmRepositiores(FilmotekaContext context)
        {
            _context = context;
        }

        public void Add(FilmModel film)
        {
            _context.films.Add(film);
            _context.SaveChanges();
        }

        public void Delate(int id)
        {
            var result = _context.films.SingleOrDefault(x => x.FilmID == id);

            if (result != null)
            {
                _context.films.Remove(result);
                _context.SaveChanges();
            }
        }

        public FilmModel Get(int id) => _context.films.SingleOrDefault(x => x.FilmID == id);

        public IQueryable<FilmModel> GetFilms()
        {
            var films = from f in _context.films
                         select f;
            return films;
        }

        public void Update(int id, FilmModel film)
        {
            var result = _context.films.SingleOrDefault(x => x.FilmID == id);

            if (result != null)
            {
                result.origi_title = film.origi_title;
                result.pol_title = film.pol_title;
                result.year = film.year;
                result.Description = film.Description;
            }
        }
public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddDbContext<FilmotekaContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("FilmotekaDatabase")));
        }
public class FilmotekaContext : DbContext
    {
        public FilmotekaContext(DbContextOptions options) : base(options)
        {

        }

        public DbSet<FilmModel> films { get; set; }
    }
[Table("FilmsTable")]
    public class FilmModel
    {
        [Key]
        public int FilmID { get; set; }

        [Required(ErrorMessage = "Pole jest wymagane")]
        [DisplayName("Tytuł orginalny")]
        [MaxLength(50)]
        public string origi_title { get; set; }

        [Required(ErrorMessage = "Pole jest wymagane")]
        [DisplayName("Tytuł polski")]
        [MaxLength(50)]
        public string pol_title { get; set; }

        [DisplayName("Rok")]
        public DateTime year { get; set; }

        [DisplayName("Opis")]
        [MaxLength(200)]
        public string Description { get; set; }
    }

Pomoże ktoś?

komentarz 7 października 2020 przez kubaapk Nałogowiec (44,270 p.)
Zarejestrowałeś serwis w kontenerze ioc?

1 odpowiedź

0 głosów
odpowiedź 7 października 2020 przez kukulim Mądrala (6,440 p.)
wybrane 30 października 2020 przez OlekS
 
Najlepsza

Chyba brakuje Ci w Startup

services.AddScoped<IFilmRepositiores, FilmRepositiores>();

 

Ps. A tu masz chyba buga:

        public ActionResult Details(int id)
        {
            return View(_filmotekaRepositiores.Get(1));
        }

//powinno raczej być
        public ActionResult Details(int id)
        {
            return View(_filmotekaRepositiores.Get(id));
        }

 

komentarz 7 października 2020 przez OlekS Początkujący (280 p.)
Dzięki już działa

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 298 wizyt
0 głosów
0 odpowiedzi 45 wizyt
pytanie zadane 4 marca w C# przez drewienko Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,553 komentarzy

61,939 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!

...