Enitity Framework при первом обращении к коду получает ошибку «System.InvalidOperationException» - PullRequest
0 голосов
/ 29 января 2020

Я следил за этим учебным пособием

И я продолжаю получать этот "Код Enitity Framework первым при получении" System.InvalidOperationException "error" на контроллере Mov ie.

Я искал другие решения, но они мне не помогли.

Это мой класс Cinemacontext.

using Cinema.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace Cinema.DAL
{
    public class CinemaContext : DbContext
    {
        public CinemaContext() : base("CinemaContext")
        {
        }

        public DbSet<Movie> Movies { get; set; }
        public DbSet<Room> Rooms { get; set; }
        public DbSet<Visitor> Visitors { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}

Инициализатор

using Cinema.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Cinema.DAL
{
    public class CinemaInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<CinemaContext>
    {
        protected override void Seed(CinemaContext context)
        {
            var movies = new List<Movie>
            {
            new Movie{Name="Starwars",StartTime=DateTime.Parse("2020-01-31"),Duration=1},
            new Movie{Name="lotr",StartTime=DateTime.Parse("1995-08-12"),Duration=1},
            new Movie{Name="hobbit",StartTime=DateTime.Parse("2014-03-22"),Duration=1},
            new Movie{Name="spongebob",StartTime=DateTime.Parse("2003-05-06"),Duration=1},
            new Movie{Name="holygrail",StartTime=DateTime.Parse("1969-01-31"),Duration=1},
            };

            movies.ForEach(s => context.Movies.Add(s));
            context.SaveChanges();
        }
    }
}

Mov ie Модальный.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace Cinema.Models
{
    public class Movie
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime? StartTime { get; set; }
        public int Duration { get; set; }
    }
}

Entity Framework из web.config:

<entityFramework>
  <contexts>
    <context type="Cinema.DAL.CinemaContexts, Cinema">
      <databaseInitializer type="Cinema.DAL.CinemaInitializer, Cinema" />
    </context>
  </contexts>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>

Mov ie контроллер

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Cinema.DAL;
using Cinema.Models;

namespace Cinema.Controllers
{
    public class MovieController : Controller
    {
        public DAL.CinemaContext db { get; set; } = new DAL.CinemaContext();

        public ViewResult MovieList()
        {
            return View(db.Movies.ToList());
        }   
    }
}

Кто-нибудь есть идея, что не так с моим кодом?

1 Ответ

1 голос
/ 29 января 2020

Вам нужно изменить <context type="Cinema.DAL.CinemaContexts, Cinema"> на <context type="Cinema.DAL.CinemaContext, Cinema">, чтобы оно соответствовало названию, которое вы здесь использовали:

public CinemaContext() : base("CinemaContext")
        {
        }

Надеюсь, это поможет!

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