Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enable-Migrations Exception calling "SetData" with "2" argument(s)

I created a library based on .NET 4.6.2 version.
To the library, I've added the EntityFramework version 6.1.3 package.
I created a model as follow

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; }   } }  

And the dbcontext

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>();     }    } } 

Then I tried to enable migration and did via

PM> Enable-Migrations 

statement, got the error message:

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. 

What do I doing wrong?

Update Here the structure, how projet is build

enter image description here

In the sessiontest.cs, I wrote the test for db.

[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();  } 

The ComponentsTest project, where I wrote the unit test, the app.config looks as follow:

<?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> 

And in the library(Component) itself the 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> 
like image 298
softshipper Avatar asked Jul 18 '16 12:07

softshipper


2 Answers

Other answers suggest this is an issue with your startup project.

As your project is a library, you could try setting your unit test project as your startup project per this answer.

You could also try setting the default project in Package Manager Console to your library project per the accepted answer here.

You might run into issues with where the migrations are created. If you need further control, in EF6 there are various arguments you can use with Enable-Migrations as detailed in this answer but I don't have enough knowledge in this area to guide you further. You might need to do some reading.

like image 162
Tone Avatar answered Sep 28 '22 01:09

Tone


2018 update - if the accepted answer doesn't help, see this github issue on the EF6 repository. Apparently code migration commands don't work with the new project format. In order for the migrations commands to work, you need to create a Class Library (.NET Framework) project (old standard), move all the files there, add all the needed dependencies and run the command.

EDIT: I just ran into this problem by creating a Class Library (.NET Standard) project on VisualStudio 2017 15.6.6 using EntityFramework 6.2.0. Creating an "old standard" project as explained above fixes it.

like image 31
Mihai Coman Avatar answered Sep 28 '22 02:09

Mihai Coman