17

在 Visual Studio 2015 中,我创建了一个 ASP.net Core 项目(以前称为 ASP.NET 5)。该项目的模板为持久性创建了一个 MS SQL localdb,以及实体框架和一些身份验证表。

在弄清楚如何浏览为此项目创建的 localdb 数据库后,我决定尝试修改模型对象并尝试使用 ASP.NET MVC 网站模板示例应用程序进行代码优先迁移。它使用 EF 为 localdb 提供登录持久性。我尝试使用

演示应用程序已经包含一个 Migrations 文件夹。但是,如果您add-migration SomeNameHere在包管理器控制台中键入,或者enable-migrations似乎无法将 ER 迁移与示例项目一起使用。

我向单元添加了一个字符串属性IdentityModel.cs,并尝试手动将其手动添加到0000...IdentitySchema.cs文件中,但显然我不知道如何正确执行此操作,因为当我运行应用程序时,出现了一些错误,如下所示。我相信我基本上需要让实体框架代码优先工具生成一些将进入迁移文件夹的骨架 .cs 单元。

人们现在建议做的通常的事情是:

  • 确保您以管理员身份运行。(完毕)
  • 确保您卸载实体框架并将其重新安装到您希望它处于活动状态的解决方案中(完成)

从包管理器控制台重新安装看起来像这样:

PM> Uninstall-Package EntityFramework
Uninstalling NuGet package EntityFramework.7.0.0-beta4.
Successfully uninstalled 'EntityFramework.7.0.0-beta4' from WebApplicationDNX.
PM> Install-Package EntityFramework -IncludePrerelease
Installing NuGet package EntityFramework.7.0.0-beta4.
Successfully installed 'EntityFramework.7.0.0-beta4' to WebApplicationDNX.
PM> 

在这里,我相信我犯了一个错误,因为我正在尝试运行像 add-migration 这样的命令,但我无法做到。事实证明,我从未支持过这样的尝试:

PM> add-migration DummyMigrate
add-migration : The term 'add-migration' is not recognized as the name of a cmdlet, function, script file, or operable program. .... 
PM> enable-migration
enable-migration : The term 'enable-migration' is not recognized as the name of a cmdlet, function, script file, or operable program. 
...

是否可以从基于ASP.NET 5 Preview Templates -> Web Site模板的应用程序从 Visual Studio 2015 迁移实体框架?

(更新 1 到 4 被删除,因为它们用于无用的历史测试版)

更新 5:在 asp.net core 1.0.0-RC2 中,dnx 工具已经消失,取而代之的是 dotnet,但基本原则是dotnet ef命令必须从项目源目录而不是解决方案目录运行,并且这样做,您可能应该使用外部命令提示符或使用适用于 Visual Studio 的 PowerShell 工具,而不是 nuget 命令行提示符。

   solution-dir           project-source-dir
         |                       |
d:\dev\AspNetCoreWebAp\src\AspNetCoreWebAp>dotnet ef
Project AspNetCoreWebAp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling AspNetCoreWebAp for .NETCoreApp,Version=v1.0
Compilation succeeded.
    0 Warning(s)
    0 Error(s)
Time elapsed 00:00:03.0846647

                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\
Entity Framework .NET Core CLI Commands 1.0.0-preview1-20901
Usage: dotnet ef [options] [command]

在此处输入图像描述

4

2 回答 2

22

以下仅适用于作为 ASP.NET Core RC1 一部分的 dnx。这已被替换并且不是 ASP.NET Core 的适用部分。

回答有关您正在寻找运行 dnx 命令的更好方式的问题:

我的 dnx 命令也给出了错误。

术语“dnx”未被识别为 cmdlet、函数的名称,

在我的 Visual Studio 包管理器控制台和 Windows PowerShell 中。

经过很多挫折,我能够解决它。

这是我为使其正常工作所做的步骤

  • 关闭 Visual Studio 的所有实例
  • 删除 C:\Users\YOURUSERNAME\.dnx 中的 .dnx 文件夹。我的远远超过 1 GB
  • 打开 Visual Studio 2015。创建一个新的默认模板 ASP.NET 5 Web 应用程序。构建并运行它。这将重新创建 .dnx 文件夹。之后文件夹大小接近600MB
  • 打开 Powershell
  • 导航到 .dnx bin 目录

    cd\
    cd users\YOURUSERNAME\.dnx\bin
    
  • 运行命令

    .\dnvm upgrade
    

    如果出现错误消息“在此系统上禁用脚本执行”。然后运行以下命令首先授予您权限

    Set-ExecutionPolicy RemoteSigned
    

去打开 Visual Studio。然后,您将能够在包管理器控制台和 powershell 中键入命令 dnx

   dnx

它会认出它

在此处输入图像描述

于 2015-10-21T17:41:28.410 回答
4

你错过了一步。从您的 beta 8 激活时的文档来看,缺少的命令是:

Install-Package EntityFramework.Commands -Pre 使迁移命令在您的项目中可用。

Commands移动到一个单独的包中,大概是为了使主框架更轻量级的生产,在那里你不能使用也不需要命令行实用程序。

Answer-Update-contributed-by-Warren:在 Asp.net core 1.0.0-RC2 中,相关包被命名Microsoft.EntityFrameworkCore.Tools,它似乎是 ASP.Net Core Web 应用程序模板的一部分,除非有人实际上损坏了他们的 project.json。不应从包管理器控制台运行命令行“EF”迁移命令,这不是 DOTNET 命令的通用环境。

于 2015-06-15T22:08:39.197 回答