VS 2015 ASP.NET Web API (EF6) и Xamarin Enable-Migrations терпят неудачу

Я занимаюсь разработкой проекта, который будет использовать ASP.NET Web API в качестве службы данных и переносимое приложение Xamarin в качестве клиента.

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

Enable-Migrations -enableautomaticmigrations -ContextTypeName MyProject.Models.ApplicationDbContext -ProjectName MyProject -StartupProjectName MyProject.App -Verbose
Using StartUp project 'MyProject.App'.
Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 
'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable."
At C:\Users\weitz\.nuget\packages\EntityFramework\6.1.3\tools\EntityFramework.psm1:718 char:5
+     $domain.SetData('project', $project)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SerializationException

Exception calling "SetData" with "2" argument(s): "Type 'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject' in assembly 
'Microsoft.VisualStudio.ProjectSystem.VS.Implementation, Version=14.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable."
At C:\Users\weitz\.nuget\packages\EntityFramework\6.1.3\tools\EntityFramework.psm1:719 char:5
+     $domain.SetData('contextProject', $contextProject)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SerializationException

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetPropertyValue[T](Project project, String propertyName)
   at System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(String configurationTypeName, Boolean useContextWorkingDirectory)
   at System.Data.Entity.Migrations.EnableMigrationsCommand.FindContextToEnable(String contextTypeName)
   at System.Data.Entity.Migrations.EnableMigrationsCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Object reference not set to an instance of an object.
**PM>**

Как видите, я попытался указать стартовый проект явно, но не похоже, что команда enable-migrations так рада этому.

Это только что созданный проект, в котором используется полная версия.NET (я привязан к модели TPT/TPH, которую EF Core пока не поддерживает), поэтому версия EF 6.1.3 предназначена для.NET 4.6.1.

Я нахожусь на VS Community 2015 Обновление 3 Версия 14.0.25431.01.

Обновить

Невозможно воспроизвести, но проблема возникает даже при добавлении фиктивного запуска проекта.
Кросс опубликовал вопрос здесь, пожалуйста, проголосуйте и поделитесь своими экспериментами.

2 ответа

Решение

В соответствии с этим (проверено и работает), единственный способ включить миграцию в проекте aspnetcore+ef6 - это иметь DbContext impl во внешней полной библиотеке классов.NET, плюс добавление фиктивного стартового проекта.
Отстой, но работает.

Кажется, это жалуется на Using StartUp project 'MyProject.App' но вы уже указали имя запускаемого проекта с -StartupProjectName MyProject.App

Можете ли вы попробовать только:

Enable-Migrations -enableautomaticmigrations -ContextTypeName MyProject.Models.ApplicationDbContext -ProjectName MyProject -StartupProjectName MyProject.App -Verbose

Убедитесь, что в вашем файле конфигурации запускаемого проекта у вас есть допустимая строка подключения (если вы не укажете имя строки подключения в конструкторе DbContext, ваша строка подключения должна называться ApplicationDbContext, как и ваш DbContext, если я правильно помню)


ОБНОВЛЕНИЕ Я недооценил проблему. Кажется, это может быть не то, как вы указываете стартовый проект, а сам стартовый проект. Я предлагаю посмотреть на этот ответ. Обратите особое внимание, как я уже говорил, что строка подключения существует в web или app.config в стартовом проекте и имеет правильное имя.

Другие вопросы по тегам