17

Я разрабатываю проект, который будет использовать ASP.NET Web API в качестве службы данных, и портативное приложение Xamarin в качестве клиента.VS 2015 API веб-интерфейса ASP.NET (EF6) и Xamarin Enable-Migrations не удалось

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

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 Update 3 Version 14.0.25431.01.

Update

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

+0

В вашем проекте запуска содержится файл app.config или web.config, который вы используете для подключения к базе данных? Вы также можете использовать проект, содержащий dbcontext, в качестве запуска. – jomsk1e

+0

Он использует appsettings.json для хранения строки подключения. Но я попытался добавить строку подключения в app.config, и это не помогло. – Shimmy

ответ

1

Ну согласно this (проверено и работает), единственный способ включения миграции в aspnetcore + Ef6 проекта, чтобы иметь DbContext осущ во внешнем полную библиотеку классов .NET, а также добавление соску запуска проекта.
Отстой, но работает.

1

Кажется, он жалуется на Using StartUp project 'MyProject.App', но вы уже указали ЗАПУСКА название проекта с -StartupProjectName MyProject.App

Вы можете только попробовать:

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

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


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

+0

Я попробовал, и [это] (http://pastebin.com/eAKYA7vN) - это выход. – Shimmy

+1

Комментарий к обновлению: я проверил все строки подключения, которые были установлены хорошо, и проект запуска (сам проект) имеет также web.config. Я считаю, что единственным вариантом является добавление фиктивного консольного приложения и установка его как запуска. – Shimmy

+0

Присуждается 25 баунтин за усилия, так или иначе ответы не работают. Я опубликовал [вопрос] (https://github.com/aspnet/EntityFramework6/issues/317) в репозитории EF6, прокомментируйте это. – Shimmy