为什么启用迁移失败?

时间:2015-08-28 11:54:57

标签: ef-code-first entity-framework-6 visual-studio-2015 ef-migrations

我今天早上安装了Visual Studio 2015社区版。之后,我创建了一个新的ASP.NET Web应用程序,并在“ASP.NET 5预览模板”部分中选择了“Web应用程序”模板。

项目创建后,我在解决方案(类库)中添加了第二个项目,该项目应该包含我的所有实体(EF Code First),业务对象,实用程序和其他核心内容。

类库使用.NET Framework 4.5.2并引用EntityFramework 6.1.3。我还添加了ASP.NET Identity 2.2.1(包括EntityFramework提供程序)。

在App.config中我有这个连接字符串:

<connectionStrings>
    <add name="ApplicationDbContext" connectionString="Server=(localdb)\projectsv12;Database=myDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

这是相应的数据库上下文类:

public class ApplicationDbContext : IdentityDbContext<User> {

   public ApplicationDbContext() : base("name=ApplicationDbContext") { }

   public static ApplicationDbContext Create() {
    return new ApplicationDbContext();
   }

   protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    base.OnModelCreating(modelBuilder);
   }

   public System.Data.Entity.DbSet<Branch> Branches { get; set; }
   public System.Data.Entity.DbSet<Dimension> Dimensions { get; set; } 
}

正如您所看到的,App.config和DbContext构造函数中的连接字符串的名称相同。我还设置了两个POCO实体并将它们添加到DbContext(分支和维度)。

所有内容都应该准备好“启用 - 迁移”,然后“更新数据库”,因为我已经使用Visual Studio 2013多次完成。

但是,在Visual Studio 2015中,我收到一条错误消息。这是我做的:

  1. 我启动了程序包管理器控制台。
  2. 我在“默认项目”下拉列表中选择了我的类库项目。
  3. 我在命令提示符处输入了“enable-migrations”(我还尝试了EF7附带的新“添加 - 迁移” - 因为我的Web项目中引用了EF7,但我会尝试一下)。
  4. 以下是我收到的错误消息:

      

    使用“2”参数调用“SetData”的异常:“在程序集中键入'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject''Microsoft.VisualStudio.ProjectSystem.VS.Implementation,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化。“   在C:\ Tfs \ Dev \ primaVISTA \ packages \ EntityFramework.6.1.3 \ tools \ EntityFramework.psm1:720 char:5   + $ domain.SetData('startUpProject',$ startUpProject)   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜       + CategoryInfo:NotSpecified:(:) [],MethodInvocationException       + FullyQualifiedErrorId:SerializationException System.NullReferenceException:未将对象引用设置为对象的实例。      在System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(Project project,Int32 shellVersion)      在System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebProject(项目项目)      在System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(String configurationTypeName,Boolean useContextWorkingDirectory)      在System.Data.Entity.Migrations.EnableMigrationsCommand.FindContextToEnable(String contextTypeName)      在System.Data.Entity.Migrations.EnableMigrationsCommand。&lt;&gt; c__DisplayClass2。&lt; .ctor&gt; b__0()      在System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action命令)   对象引用未设置为对象的实例。

    有人知道我做错了什么吗?我错过了什么吗?或者这是由于VS2015中的错误可能?

    我非常感谢任何帮助!谢谢!

    正如Sirwan建议的那样,我打开了一个命令提示符,然后一直到我的库项目文件夹。在这里,我执行了add migration命令:

    C:\Tfs\Dev\primaVISTA\src\primaVISTA.Core>dnx . ef migration add M1
    

    System.InvalidOperationException:无法从C:\ Tfs \ Dev \ primaVISTA \ src \ primaVISTA.Core解析项目'primaVISTA.Core'    在Microsoft.Framework.Runtime.ApplicationHostContext..ctor(IServiceProvider serviceProvider,String projectDirectory,String packagesDirectory,String configuration,FrameworkName targetFramework,ICache cache,ICacheContextAccessor cacheContextAccessor,INamedCacheDependencyProvider namedCacheDependencyProvider,IAssemblyLoadContextFactory loadContextFactory,Boolean skipLockFileValidation)    在Microsoft.Framework.Runtime.DefaultHost.Initialize(DefaultHostOptions选项,IServiceProvider hostServices)    在Microsoft.Framework.Runtime.DefaultHost..ctor(DefaultHostOptions选项,IServiceProvider hostServices)    在Microsoft.Framework.ApplicationHost.Program.Main(String [] args) ---从抛出异常的先前位置开始的堆栈跟踪结束---    在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()    在Microsoft.Framework.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly,String [] args,IServiceProvider serviceProvider)    at dnx.host.Bootstrapper.RunAsync(List`1 args,IRuntimeEnvironment env,FrameworkName targetFramework)    at dnx.host.RuntimeBootstrapper.ExecuteAsync(String [] args,FrameworkName targetFramework)    at dnx.host.RuntimeBootstrapper.Execute(String [] args,FrameworkName targetFramework)

    我不知道这意味着什么...

1 个答案:

答案 0 :(得分:3)

Visual Studio 2015中目前不是这种情况,您应该在项目目录(而不是解决方案目录)中键入以下内容:

C0068000

要查看可用于迁移命令的子命令,请键入dnx . ef [options] [command]

  • dnx . ef migration --help - 添加新迁移

  • add - 将迁移应用于数据库

  • apply - 列出迁移
  • list - 从迁移生成SQL脚本
  • script - 删除上次迁移

more info

<强>更新: 首先,您必须设置您的环境:

  1. 打开一个新的命令提示符。
  2. 导航到src [ProjectName]目录。
  3. 运行dnvm upgrade以安装必要的ASP.NET 5工具(如果尚未安装)。
  4. 运行dnu restore以加载项目所需的所有包。
  5. 然后运行此命令:

    remove