Исключения для первых миграций кода Entity Framework - PullRequest
6 голосов
/ 06 марта 2012

Я получаю несколько необработанных исключений при использовании Code First Migrations of Entity Framework 4.3.

Контекст базы данных:

public class MyAppContext : DbContext
{
   public DbSet<Branch> Branches { get; set; }

   public MyAppContext()
   { }
}

Сущность:

public class Branch : IEntity<Guid>
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool Active { get; set; }
 }

Инициализатор базы данных:

public class MyAppInitializer : CreateDatabaseIfNotExists<MyAppContext>
{
   protected override void Seed(MyAppContext context)
   {
      context.Branches.Add(new Branch() { Id = branchId, Name = "Acme", Description = "Acme", Active = true });
      context.SaveChanges();
   }
}

Я установил Entity Framework 4.3 в свой проект DAL и MVC, используя:

Install-Package EntityFramework

Я установил проект MVC в качестве запускаемого проекта и выполнил следующую команду для проекта DAL с контекстом базы данных и инициализатором:

PM> Enable-Migrations -Verbose

Использование проекта NuGet 'Ckms.KeyManagement.Managers'. Ошибка при поиске типа контекста (укажите -Verbose, чтобы увидеть подробности исключения). System.Data.Entity.Migrations.Design.ToolingException: невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации. в System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner бегун) в System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes ()
в System.Data.Entity.Migrations.MigrationsCommands.FindContextToEnable () Отредактируйте сгенерированный класс Configuration, чтобы указать контекст для включить миграции для. Первоначальные миграции кода включены для проекта Ckms.KeyManagement.Managers.

Дочерний класс DbMigrationsConfiguration добавлен в проект DAL. Если я добавлю тип DbContext вручную и включу автоматическую миграцию:

internal sealed class Configuration : DbMigrationsConfiguration<MyAppContext>
{
   public Configuration()
   {
      AutomaticMigrationsEnabled = true;
   }

   protected override void Seed(MyAppContext context)
   { }
}

Эти исключения генерируются для команд Add-Migration и Update-Database:

PM> Add-Migration TestEFMigrationsColumn -Verbose

Использование проекта NuGet 'Ckms.KeyManagement.Managers'. Использование проекта StartUp ''. System.Reflection.TargetInvocationException: было сгенерировано исключение целью вызова. ---> System.ArgumentException: параметр неверен. (Исключение из HRESULT: 0x80070057 (E_INVALIDARG)) --- конец трассировки стека внутренних исключений --- в System.RuntimeType.InvokeDispMethod (имя строки, BindingFlags invokeAttr, Object target, Object [] args, Boolean [] byrefModifiers, Культура Int32, String [] namedParameters) в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, Binder Binder, Object target, Object [] provideArgs, Модификаторы ParameterModifier [], CultureInfo culture, String [] namedParams) в System.Management.Automation.ComMethod.InvokeMethod (метод PSMethod, Object [] arguments) Исключение было сгенерировано целью призывание.

Update-Database:

PM> Обновление базы данных -Verbose

Использование проекта NuGet 'Ckms.KeyManagement.Managers'. Использование проекта StartUp ''. System.Reflection.TargetInvocationException: было сгенерировано исключение целью вызова. ---> System.ArgumentException: параметр неверен. (Исключение из HRESULT: 0x80070057 (E_INVALIDARG)) --- конец трассировки стека внутренних исключений --- в System.RuntimeType.InvokeDispMethod (имя строки, BindingFlags invokeAttr, Object target, Object [] args, Boolean [] byrefModifiers, Культура Int32, String [] namedParameters) в System.RuntimeType.InvokeMember (имя строки, BindingFlags bindingFlags, Binder Binder, Object target, Object [] provideArgs, Модификаторы ParameterModifier [], CultureInfo culture, String [] namedParams) в System.Management.Automation.ComMethod.InvokeMethod (метод PSMethod, Object [] arguments) Исключение было сгенерировано целью призывание.

Есть идеи? Сообщения об ошибках не очень полезны. Я пробовал команды Nuget с существующей базой данных и без нее.

Ответы [ 7 ]

12 голосов
/ 06 марта 2012

Если вы используете отдельную библиотеку для доступа к данным, вам нужно указать ее имя при выполнении запроса:

Add-Migration -StartUpProjectName "Ваш проект DAL" MyNewMigration

Update-Database -StartUpProjectName "Ваш проект DAL" -Verbose

4 голосов
/ 17 мая 2012
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole

Первое: имя миграции

Dbset.Framework: проект, в котором dbContext и другие классы

CodeFirstConsole: проект запуска (это может быть ваше веб, windows или консольное приложение)

3 голосов
/ 19 марта 2014

Для System.ArgumentException: параметр неверен.(Исключение из HRESULT: 0x80070057 (E_INVALIDARG)) добавление -projectname и startupprojectname не помогло.

Установка раскрывающегося списка «Проект по умолчанию» консоли PackageManager для указания библиотеки (в моем случае), где я хотел «Миграция»папка "и ее ожидаемое содержимое было единственным способом запустить это из мультипроектного решения.

1 голос
/ 10 августа 2018

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

<add name="abcd" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;AttachDbFileName=|DataDirectory|\DatabaseFileName.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True" />

И я использую connectionStrings после закрытия тега

appSettings

и непосредственно перед началом тега

system.web

Убедитесь, что имя , которое вы используете в connectionString, не используется в других соединениях.

1 голос
/ 28 июня 2014

У меня тоже была такая же проблема.Выяснил, что если что-то не так с файлами конфигурации, появляется эта ошибка.В web.config у меня были дубликаты тегов, и удаление их решило мою проблему.

0 голосов
/ 30 мая 2019

В вашей сети должно быть две строки подключения.Конфиг файлы.Просто удалите одну

0 голосов
/ 23 июня 2015

столкнулся с той же проблемой, решается удалением <globalization> из web.config.

...