Исключение Enable-Migrations, вызывающее «SetData» с аргументом «2»

Я создал библиотеку на основе версии .NET 4.6.2.
В библиотеку я добавил пакет EntityFramework версии 6.1.3.
Я создал модель как следовать

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Components.Models
{
  public class Session
  {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Id { get; set; }

    [Key]
    [Required]
    public string Identity { get; set; }

    [Required]
    public DateTime CreatedAt { get; set; }

    [Required]
    public DateTime UpdatedAt { get; set; }
  }
} 

И дбконтекст

using System.Configuration;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using Components.Models;

namespace Components.DataContexts
{
  public class SessionContext : DbContext
  {
    public SessionContext() : base(ConfigurationManager.ConnectionStrings["sessiondb"].ConnectionString)
    {
    }

    public DbSet<Session> Sessions { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
    }

  }
}

Затем я попытался включить миграцию и сделал через

PM> Enable-Migrations

Скажите, получил сообщение об ошибке:

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 D:\C#\IndustryCloud\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:720 char:5
+     $domain.SetData('startUpProject', $startUpProject)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SerializationException

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(Project project, Int32 shellVersion)
   at System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebProject(Project project)
   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.

Что я делаю не так?

Обновить Здесь структура, как проект построен

В sessiontest.cs я написал тест для БД.

[Test]
public void InsertARow_DbInitial_ExpectDbValue()
{

  var sn = new Session()
  {
    Identity = Random.Generate(15),
    CreatedAt = DateTime.Now,
    UpdatedAt = DateTime.Now
  };

  db.Sessions.Add(sn);
  db.SaveChanges();

}

Проект ComponentsTest, в котором я написал модульный тест, app.config выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Session;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" name="sessiondb" />
  </connectionStrings>
</configuration>

И в самой библиотеке (Компонент) app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <configSections>

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

  <connectionStrings>
    <add connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Session;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" name="sessiondb" />
  </connectionStrings>

</configuration>
 zero_coding18 июл. 2016 г., 14:35
Я обновил свой пост, пожалуйста, проверьте. Что может быть не так с запуском проекта?
 zero_coding18 июл. 2016 г., 14:56
Я обновил свой пост, пожалуйста, проверьте.
 Tone18 июл. 2016 г., 14:18
Возможно, проблема с вашим проектом запуска? реОшибка установки Enable-Migrations
 M.Hassan18 июл. 2016 г., 14:39
Правильно ли вы определите свою строку подключения?

Ответы на вопрос(6)

Это может произойти, если у вас установлен Microsoft.EntityFrameworkCore.SqlServer вместе со старой версией EntityFramework, скажем 6.x

В Visual Studio перейдите в раздел Проект / Управление пакетами Nuget ...

Просмотрите список установленных и, если установлено более одной версии EntityFramework, удалите все старые версии, оставив только последнюю версию.

 Maetis21 февр. 2018 г., 08:42
Шаблон проекта VS для ASP.NET Core был установленMicrosoft.AspNetCore.All который включает в себяMicrosoft.EntityFrameworkCore.Design, После установки EF6 я получил такую ​​же ошибку. Решение состояло в том, чтобы удалить «все» версии пакета и переустановить другие необходимые пакеты отдельно.

вы можете использовать команду:

Enable-Migrations -EnableAutomaticMigrations -ProjectName Components -StartupProjectName Components

Параметры:

-Название проекта

Определяет проект, в который будет добавлен класс конфигурации миграции леса (configuration.cs). Если опущен, используется проект по умолчанию, выбранный в консоли диспетчера пакетов.

-StartUpProjectName

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

Чтобы получить более подробную информацию о команде, выполните:

get-help enable-migrations -Full        
 M.Hassan21 окт. 2016 г., 13:53
@Softlion. Можете ли вы опубликовать полученную ошибку?
 Softlion21 окт. 2016 г., 21:54
Используя принятый ответ, он отлично работает
 Softlion21 окт. 2016 г., 11:27
безуспешно, все та же ошибка

этот вопрос GitHub в репозитории EF6. Очевидно, команды переноса кода не работают с новым форматом проекта. Чтобы команды миграции работали, вам нужно создатьClass Library (.NET Framework) Project (старый стандарт), переместите все файлы туда, добавьте все необходимые зависимости и выполните команду.

РЕДАКТИРОВАТЬ: я только столкнулся с этой проблемой, создавClass Library (.NET Standard) проект на VisualStudio 2017 15.6.6 с использованием EntityFramework 6.2.0. Создание "старого стандартного" проекта, как описано выше, исправляет это.

Изменить: Простое исправление (как указано выше)-StartupProjectName YourEF6ProjectNameHere

Когда я использовал неправильное имя StartupProjectName, я все еще получил ошибку. Вот когда я использовал решение ниже:

Мой обходной путь - выгрузить проект, который не требует миграции EF:

Выгрузите стартовый проект (в моем случае это проект ASP.Net Core). Щелкните правой кнопкой мыши имя проекта и выберитеUnload Project.Запустите необходимые команды миграции в консоли диспетчера пакетов.Щелкните правой кнопкой мыши на незагруженном проекте и выберитеReload ProjectЩелкните правой кнопкой мыши по тому же проекту и выберитеSet as StartUp Project.

Не смешно.

после того, как я клонировал старый устаревший проект, который все еще был настроен для работы на asp.net Core Rc2. После того, как я установил 1.1 и изменил все переменные, ошибка не исчезла.

Решение в моем случае былоперезагружать, Установка Asp.net Core 1.1 еще не была завершена.

 James30 мар. 2017 г., 10:35
Я не тратил на это больше времени, это не был проект для производства, я просто возился с изменениями. Я попытался воссоздать проблему с выпущенным VS2017, и это больше не происходит, все просто работает.
 Krishna29 мар. 2017 г., 20:31
@James - тебе удалось это исправить, у меня та же проблема, но я не смог найти выход.
 James07 февр. 2017 г., 15:07
У меня есть эта проблема с ASP.NET Core и полной .NET Framework, когда миграции выполняются в другом проекте библиотеки классов. Я дам этому обновлению идти.
Решение Вопроса

Другие ответы предполагают, что это проблема вашего стартапа.

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

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

У вас могут возникнуть проблемы с созданием миграций. Если вам нужен дополнительный контроль, в EF6 есть различные аргументы, которые вы можете использовать сEnable-Migrations как подробно описано вэтот ответ но у меня недостаточно знаний в этой области, чтобы вести вас дальше. Возможно, вам придется немного почитать.

 zero_coding18 июл. 2016 г., 15:44
Джухуй, это работает. Я установил Компоненты как стартовый проект. Спасибо.

Ваш ответ на вопрос