Проблемы при настройке Entity Framework (сначала кода) в проекте ASP.Net MVC - PullRequest
0 голосов
/ 04 мая 2018

Я делаю онлайн-курс на MVC.Net, который является очень поверхностным компонентом Entity Framework.

Пока этот проект состоит из 2 классов (Фильмы и Клиенты) и связанных с ними видов и контроллеров.

Я застрял, потому что не могу скопировать компонент Entity Framework проекта.

Вот шаги, которые я ожидал (основываясь на результатах курса) и что я получил:

1 - Создать проект миграции

Шаги: Диспетчер пакетов Nuget> Тип " enable-migrations "

Ожидаемый результат: Сообщение об успешном завершении. В решении создана папка «Миграции».

Фактический результат: Ошибка. « enable-migrations не распознается как имя командлета

После расследования я заметил, что Entity Framework не установлен, поэтому я установил его с помощью NuGet. После этого вышеприведенная команда сработала.

2 - Добавить миграцию

Шаги: на консоли, напишите « add -igration InitialModel »

Ожидаемый результат: Команды Sql добавляются в папку «Миграции». Класс «IdentityModels» добавлен в папку «Модели» с некоторыми методами аутентификации.

Фактический результат: Ошибка " Не найден тип контекста в сборке ". После этого ничего не произошло.

Я нашел статью, объясняющую, что в проекте должен быть класс, унаследованный от DbContext. Так я и сделал. Создан пустой класс, который наследуется от «DbContext». Команда, приведенная выше, теперь работает, но класс IdentityModels не был создан, не были добавлены сценарии, не были созданы методы аутентификации.

Чего мне не хватает? Почему я должен был создать этот класс, унаследованный от "DbContext", когда видео курса не должно было это делать? И, наконец, почему эти классы и методы аутентификации не создаются автоматически так, как я видел в курсе?

Я задаю эти вопросы, потому что очень надеюсь, что эта проблема поможет мне немного лучше понять Entity Framework.

1 Ответ

0 голосов
/ 04 мая 2018

Предполагается, что вы используете Identity для создания таблиц для хранения пользовательских данных и т. Д. Здесь вам понадобится несколько кусочков головоломки:

Класс, который наследуется от IdentityDbContext (не просто DbContext, поскольку вам также нужны таблицы Identity):

 public class MyContext: IdentityDbContext<ApplicationUser>
  {
    /// <summary>
    /// default project context
    /// </summary>
    public MyContext() : base("yourConnectionString")
    {
      //optional but I use: Configuration.LazyLoadingEnabled = false;
      //optional but I use: Configuration.ProxyCreationEnabled = false;
    }

    public static MyContext Create()
    {
      return new MyContext();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      base.OnModelCreating(modelBuilder);

      //remove cascade deletions; we handle our deletions manually in the code
      //optional but I use: modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
      //optional but I use: modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
    }

    //add a dbset for each model class that you want to make a table for
    //you do NOT need to do this for the Identity provided classes
    public DbSet<Movie> Movies { get; set; }
    public DbSet<Customer> Custoemrs { get; set; }
  }

a web.config запись для строки подключения (обратите внимание, в зависимости от вашей базы данных, раздел connectionString="..." может отличаться для вас):

<configuration>
  <configSections>
    <connectionStrings>
      <add name="yourConnectionString" connectionString="Data Source=localhost;Initial Catalog=ProEdVerificationPortalDb;Integrated Security=True;" providerName="System.Data.SqlClient" />
    </connectionStrings>
  </configSections>
</configuration>

Класс для представления пользователей вашего приложения:

public class ApplicationUser : IdentityUser
{
   //only application user fields that are specific to your application
   //i.e: any fields that the default AspNetUsers table does not have
   public DateTime? InactiveDate { get; set; }
}

В зависимости от того, как вы настроили миграцию, это может просто сгенерировать миграцию, но не запустить ее. Вам может потребоваться ввести команду update-database в консоли диспетчера пакетов после того, как вы добавили миграцию, чтобы миграция действительно выполнялась.

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