Ответ 1
использовать параметр -ProjectName в консоли диспетчера пакетов:
Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
У меня есть 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
Как включить миграцию?
использовать параметр -ProjectName в консоли диспетчера пакетов:
Enable-Migrations -ProjectName Toombu.DataAccess -StartUpProjectName Toombu.Web -Verbose
Я удивлен, что никто не упомянул о явном ответе на этот вопрос: 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; второй - для проекта по умолчанию. Если вы раскрываете проект по умолчанию и выбираете проект в своем решении, то любые команды, которые вы выдаете в консоли диспетчера пакетов, будут выполняться против выбранного проекта.
Измените проект по умолчанию и выберите проект запуска из раскрывающегося списка:
Если кто-то все еще сталкивается с этой проблемой. Я решил это, используя следующую команду:
Enable-Migrations -ProjectName <YOUR_PROJECT_NAME> -ContextTypeName <YOUR_CONTEXT_NAME>
Не забудьте использовать полный путь к вашему имени контекста.
У вас dbcontext находится в Toombu.DataAccess
Итак, вы должны включить миграции в Toombu.DataAccess
.
Мне пришлось сделать комбинацию из двух вышеупомянутых комментариев.
Оба устанавливают проект по умолчанию в консоли диспетчера пакетов, а также комментарии Абхинанда о добавлении переменной -ContextTypeName в мою полную команду. Итак, моя команда была следующей.
Enable-Migrations -StartUpProjectName RapidDeploy -ContextTypeName RapidDeploy.Models.BloggingContext -Verbose
Мои настройки::
Измените проект по умолчанию на доступ к данным
измените раскрывающийся список проектов по умолчанию в консоли диспетчера пакетов на доступ к данным и включите миграцию...
Все успехи
Что вам нужно сделать, это перейти в папку модели и создать новый класс с именем MyDbContext
.
Он должен выглядеть следующим образом:
public class MyDbContext : DbContext
{
public MyDbContext()
{
}
}
Затем вам также нужно будет добавить ссылку на System.Data
, тогда вам также потребуется вызвать ее, добавив ее в начало сообщения using System.Data.Entity;
Моя проблема была 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>
Я создал класс в каталоге 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.
}
}
}
Убедитесь, что вы используете ту же версию 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.
Опять же, как было отмечено на шаге 2, мне пришлось дважды перезапустить визуальную студию, чтобы с уверенностью работать с консолью диспетчера пакетов NuGet после обновления моей версии диспетчера пакетов NuGet. У меня возникла ошибка при запуске консоли в первый раз. "вызов вызова вызова createinstancefrom с 8 аргументами не смог загрузить файл или сборку EntityFramework" при повторном выполнении команды enable-migrations.
Однако перезапуск визуальной студии, похоже, разрешил эти проблемы.
У меня возникла такая же проблема. Я даже попытался включить миграцию, хотя я уже это сделал. Но он продолжает давать ту же ошибку. Затем мне пришлось использовать переключатель force, чтобы преодолеть эту проблему. Я уверен, что это поможет в чьем-то другом случае, а также о возможной работе.
После включения миграции с использованием силы вы должны обновить свою базу данных (убедитесь, что проект по умолчанию установлен правильно). В противном случае вы получите еще одну проблему, как ожидающие миграции.
Затем просто выполните свои добавления-миграции или любые другие команды, они должны работать.
Enable-Migrations -ProjectName <PROJECT_NAME> -ContextTypeName <FULL_CONTEXT_NAMESPACE.YOUR_CONTEXT_NAME> -force
Спасибо за предложения, я решил проблему, объединив все решения здесь. Сначала я создал модель DbContext:
public class MyDbContext: DbContext
{
public MyDbContext()
{
}
}
После создания класса dbcontext я запустил команду enable-migration с именем проекта: enable-migrations -ProjectName YourProjectName
Эта ошибка возникает из-за того, что компилятор не получает класс Context в вашем приложении. Таким образом, вы можете добавить его вручную с помощью Add → Class и наследовать его с помощью класса DbContext Например:
public class MyDbContext : DbContext
{
public DbSet<Customer> Customer { get; set; }
public MyDbContext()
{
}
}
Как обновить таблицу и столбец в mvc, используя framework code
сущности первым подходом
1: инструмент> консоль менеджера пакетов
2: выбрать текущий проект, в котором существует класс контекста
3. Включите миграцию, используя следующую команду PM > enable-migrations
4: Добавьте имя папки миграции, используя следующую команду PM > add-migration MyMigrationName
4: Теперь обновите базу данных, следуя команде PM > update-database
Выполните следующие шаги, чтобы решить проблему
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
namespace EntityFrameworkCodeFirst.Module
{
public class MyDbContext: DbContext
{
public MyDbContext()
{
}
}
}
И если у вас есть несколько проектов в одном решении, чем вы должны использовать следующие команды: -
Enable-Migrations -ProjectName EntityFrameworkCodeFirst
Добавление класса, который наследует DbContext
решило мою проблему:
public class MyDbContext : DbContext { public MyDbContext() { } }
Работал для меня:
UnInstall-Package EntityFramework
Установить-пакет EntityFramework