VS 2015 ASP.NET Web API(EF6)& Xamarin Enable-Migrations失败

时间:2017-02-10 02:33:08

标签: c# entity-framework asp.net-web-api xamarin.forms ef-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>**

正如您所看到的,我已经尝试明确指定启动项目,但看起来并不像启用迁移命令那样高兴。

这是我刚创建的一个项目,它使用完整的.NET(我已经绑定到了EF Core目前还不支持的TPT / TPH模型),所以EF版本是6.1.3定位.NET 4.6.1。

关于VS Community 2015 Update 3版本14.0.25431.01。

更新

无法重现,但即使添加虚拟启动项目,问题也会发生 已发布问题here,请投票并分享您的实验。

2 个答案:

答案 0 :(得分: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,如果我没记错的话)< / p>

<强>更新 我低估了这个问题。似乎可能不是您如何指定启动项目,而是启动项目本身。我建议看this answer。正如我之前所说,请特别注意连接字符串存在于启动项目中的web或app.config中,并且具有正确的名称。

答案 1 :(得分:1)

根据this(测试和工作),在aspnetcore + ef6项目中启用迁移的唯一方法是在外部完整的.NET类库中使用DbContext impl,并添加虚拟启动项目。
糟透了但是很有效。