Подтвердить что ты не робот

EF 5 Enable-Migrations: в сборке не было найдено контекстного типа

У меня есть 4 проекта:

Toombu.Entities : all models are there
Toombu.DataAccess: Mapping, Repository and ToombuContext
Toombu.Logique : Logic of my application
Toombu.Web : MVC 4 application. With all others DLL.

Я попытался включить миграцию в Toombu.Web, но у меня была эта ошибка:

No context type was found in the assembly

Как включить миграцию?

4b9b3361

Ответ 1

использовать параметр -ProjectName в консоли диспетчера пакетов:

Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose

Ответ 2

Я удивлен, что никто не упомянул о явном ответе на этот вопрос: Entity Framework требует контекста до того, как будут активированы миграции-миграции. Сообщение об ошибке, опубликованное OP, показывает, что контекст не найден. Конечно, это может быть из-за того, что консоль диспетчера пакетов не "видит" контекст - в этом случае принятый ответ является возможным решением (другое решение я предлагаю ниже). Но в текущем проекте (сборке) должен существовать контекст, прежде чем какие-либо другие решения будут работать.

Что значит иметь контекст? Это означает, что в вашем проекте должен существовать класс, который наследуется от DbContext (в System.Data.Entity). Вот пример:

public class MyDbContext : DbContext
{
    public MyDbContext()
    {
    }
}

Убедитесь, что вы используете

using System.Data.Entity;

прежде чем код выше имеет доступ к классу DbContext и что вы использовали NuGet для получения Entity Framework 4.1 или более поздней версии для текущего проекта.

Если бы у вас был контекст, но консоль диспетчера пакетов просто не "видит" его: в Visual Studio 2013 вам не нужно использовать переключатель -ProjectName. Вместо этого перейдите в консоль диспетчера пакетов (он доступен в списке "Просмотр | Другие Windows" ) и просмотрите два раскрывающихся списка, которые отображаются в верхней части окна консоли управления диспетчера пакетов. Первый раскрывающийся список для Source Package; второй - для проекта по умолчанию. Если вы раскрываете проект по умолчанию и выбираете проект в своем решении, то любые команды, которые вы выдаете в консоли диспетчера пакетов, будут выполняться против выбранного проекта.

Ответ 3

Измените проект по умолчанию и выберите проект запуска из раскрывающегося списка: введите описание изображения здесь

Ответ 4

Если кто-то все еще сталкивается с этой проблемой. Я решил это, используя следующую команду:

Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>

Не забудьте использовать полный путь к вашему имени контекста.

Ответ 5

У вас dbcontext находится в Toombu.DataAccess Итак, вы должны включить миграции в Toombu.DataAccess.

Ответ 6

Мне пришлось сделать комбинацию из двух вышеупомянутых комментариев.

Оба устанавливают проект по умолчанию в консоли диспетчера пакетов, а также комментарии Абхинанда о добавлении переменной -ContextTypeName в мою полную команду. Итак, моя команда была следующей.

Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose

Мои настройки::

  • ProjectName - RapidDeploy
  • BloggingContext (класс, содержащий DbContext, файл находится в папке "Модели" основного проекта)

Ответ 7

Измените проект по умолчанию на доступ к данным

измените раскрывающийся список проектов по умолчанию в консоли диспетчера пакетов на доступ к данным и включите миграцию...

Все успехи

Ответ 8

Что вам нужно сделать, это перейти в папку модели и создать новый класс с именем MyDbContext.

Он должен выглядеть следующим образом:

public class MyDbContext : DbContext
{
    public MyDbContext()
    {
    }
}

Затем вам также нужно будет добавить ссылку на System.Data, тогда вам также потребуется вызвать ее, добавив ее в начало сообщения using System.Data.Entity;

Ответ 9

Моя проблема была link→ problem1

Я решил эту проблему с помощью одной простой командной строки

Install-Package EntityFramework-IncludePrerelease

После этого мне нужно было столкнуться с еще одной проблемой, например:

"Не найден тип контекста в сборке"

Я решаю это очень легко. Это "Без контекста", что означает, что вам нужно создать класс в папке "Модель" в вашем приложении с суффиксом, например DbContext... как этот MyDbContext. Там вам нужно включить некоторую библиотеку, используя System.Data.Entity;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;


namespace Oceans.Models
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {
        }
    }
}

После этого мне просто понадобилась эта командная строка:

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

Ответ 10

Я создал класс в каталоге Models под названием: myData со следующим кодом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace Vidly.Models
{
    public class MyDbContext : DbContext
    {
        public MyDbContext()
        {
        }
    }
}

пересобрать приложение с помощью: control-shift-b

затем запустил следующее в консоли nuGet:

Включение миграции -StartUpProjectName Vidly -ContextTypeName Vidly.Models.MyDbContext -Verbose

Консоль вернула:

Использование StartUp проекта "Vidly". Использование проекта NuGet Vidly. Проверка, если контекст нацелен на существующую базу данных... Code First Migrations включена для проекта Vidly. Включение миграции -StartUpProjectName Vidly -ContextTypeName Vidly.Models.myData -Verbose

И FrameWork создал каталог Migrations и написал там файл Configuration.cs со следующим кодом:

namespace Vidly.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<Vidly.Models.MyDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(Vidly.Models.MyDbContext context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
            //  to avoid creating duplicate seed data.
        }
    }
}

Ответ 11

Убедитесь, что вы используете ту же версию Entity Framework для всех проектов, используя диспетчер пакетов NuGet.

Недавние обновления Windows, возможно, установили более новую версию Entity Framework в ваш активный проект.

Фон: Около 16 марта 2016 года я начал получать эту ошибку при попытке добавить миграции в проект, в котором я уже включил миграции и успешно выполнил миграцию для.

Я заметил, что около 10 марта была выпущена новая стабильная версия Entity Framework 6.

Если я указал параметр -ContextTypeName в команде enable-migrations, у меня появилась ошибка, указывающая, что миграция уже включена.

Разрешение:

1) Инструменты → Диспетчер пакетов Nuget → Управление пакетами Nuget для решения

2) (Не уверен, что этот шаг необходим, но..) Я обновил мою версию Nuget Package Manager до последней версии. Кроме того, после обновления моей версии Nuget Package Manager мне пришлось перезапустить Visual Studio дважды, прежде чем командная строка NuGet будет работать правильно.

3) Инструменты → Диспетчер пакетов Nuget → Управление пакетами Nuget для решения → Поиск Установленные пакеты → Тип Entity Framework

а. Вы можете увидеть более чем одну версию Entity Framework.

б. Нажмите "Управление" на каждой версии Entity Framework и убедитесь, что ваши проекты используют ту же версию Entity Framework.

  • Снимите флажок с версии Entity Framework, которую вы не используете, и для используемой версии Entity Framework убедитесь, что она проверена в ваших проектах, которые ей нужны.

Опять же, как было отмечено на шаге 2, мне пришлось дважды перезапустить визуальную студию, чтобы с уверенностью работать с консолью диспетчера пакетов NuGet после обновления моей версии диспетчера пакетов NuGet. У меня возникла ошибка при запуске консоли в первый раз. "вызов вызова вызова createinstancefrom с 8 аргументами не смог загрузить файл или сборку EntityFramework" при повторном выполнении команды enable-migrations.

Однако перезапуск визуальной студии, похоже, разрешил эти проблемы.

Ответ 12

У меня возникла такая же проблема. Я даже попытался включить миграцию, хотя я уже это сделал. Но он продолжает давать ту же ошибку. Затем мне пришлось использовать переключатель force, чтобы преодолеть эту проблему. Я уверен, что это поможет в чьем-то другом случае, а также о возможной работе.

После включения миграции с использованием силы вы должны обновить свою базу данных (убедитесь, что проект по умолчанию установлен правильно). В противном случае вы получите еще одну проблему, как ожидающие миграции.

Затем просто выполните свои добавления-миграции или любые другие команды, они должны работать.

Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force

Ответ 13

Спасибо за предложения, я решил проблему, объединив все решения здесь. Сначала я создал модель DbContext:

 public class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }
    }

После создания класса dbcontext я запустил команду enable-migration с именем проекта: enable-migrations -ProjectName YourProjectName

Ответ 14

Эта ошибка возникает из-за того, что компилятор не получает класс Context в вашем приложении. Таким образом, вы можете добавить его вручную с помощью Add → Class и наследовать его с помощью класса DbContext Например:

public class MyDbContext : DbContext
    {
        public DbSet<Customer> Customer { get; set; }
        public MyDbContext()
        {
        }
    }

Ответ 15

Как обновить таблицу и столбец в mvc, используя framework code сущности первым подходом

1: инструмент> консоль менеджера пакетов

2: выбрать текущий проект, в котором существует класс контекста

3. Включите миграцию, используя следующую команду PM > enable-migrations

4: Добавьте имя папки миграции, используя следующую команду PM > add-migration MyMigrationName

4: Теперь обновите базу данных, следуя команде PM > update-database

Ответ 16

Выполните следующие шаги, чтобы решить проблему

Install-Package EntityFramework-IncludePrerelease

или установите платформу сущностей из диспетчера пакетов Nuget

Перезапустите Visual Studio

После этого я получаю "Не найден тип контекста в сборке"

Чтобы разрешить это - это "Нет контекста", что означает, что вам нужно создать класс в папке "Модель" в вашем приложении с суффиксом, например DbContext... как этот AppDbContext. Там вам нужно включить некоторую библиотеку, используя System.Data.Entity;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;


namespace Oceans.Models
{
    public class MyDbContext:DbContext
    {
        public MyDbContext()
        {
        }
    }
}

После этого выполните следующую команду в диспетчере пакетов:

Enable-Migrations -ProjectName <YourProjectName> -ContextTypeName <YourContextName>

Имя моего проекта: MyFirstApp и AppDbContext находятся в папке модели, поэтому путь

Enable-Migrations -StartUpProjectName MyFirstApp -ContextTypeName MyFirstApp.Models.AppDbContext

Ответ 17

namespace EntityFrameworkCodeFirst.Module
{
    public class MyDbContext: DbContext
    {
        public MyDbContext()
        {
        }
    }
}

И если у вас есть несколько проектов в одном решении, чем вы должны использовать следующие команды: -

Enable-Migrations -ProjectName EntityFrameworkCodeFirst

Ответ 18

Добавление класса, который наследует DbContext решило мою проблему:

public class MyDbContext : DbContext { public MyDbContext() { } }

Ответ 19

Работал для меня:

 UnInstall-Package EntityFramework 
  • Перезапустите Visual Studio

Установить-пакет EntityFramework

  • Построить проект