gpt4 book ai didi

c# - 无法在 .Net Standard 2.1 项目中添加 EF 6.4 迁移

转载 作者:行者123 更新时间:2023-12-03 21:15:23 24 4
gpt4 key购买 nike

我们正处于将一个巨大的解决方案移植到 .Net Core(从 4.7.2 开始)的最后阶段,但我们还没有准备好迁移到 Entity Framework Core,因为我们使用了 table-per-type 层次结构,等。我们使用 EF 代码优先。因此,包含我们的 DbContext 和 EF 迁移的项目现在正在运行 .netstandard2.1 并引用 EF 6.4(从 v6.3 开始,显然支持 .net core)。我知道 EF 工具已从 v6.2 -> v6.4 更改,因此我们创建 EF 迁移的传统方式现在导致包管理器控制台中出现以下错误:

add-migration TEST -project 数据

项目“数据”针对框架“.NETStandard”。 Entity Framework 包管理器控制台工具不支持此框架。

经过一番调查,我遇到了this ,这表明您需要使用 .Net Core 程序集作为虚拟启动项目。创建 .netcore 3.1 控制台应用程序项目(称为 Data_Startup,它引用数据项目)并稍微修改我的命令后,我现在收到以下错误:

dotnet ef 迁移添加 TEST --project Data --startup-project Data_Startup -c CustomContext

未找到名为“CustomContext”的 DbContext。

这似乎至少是在尝试迁移,但我现在被卡住了。我已经尝试使用命名空间完全限定 DbContext 并将 DBContext 类作为“链接文件”添加到新的虚拟项目中,但我遇到了同样的错误。

我还尝试使用 EF 6.4 工具:
dotnet C:\Users\xxxx.nuget\packages\entityframework\6.4.0\tools\netcoreapp3.0\any\ef6.dll"迁移添加TEST --assembly Data

您的目标项目“数据”未引用 EntityFramework。这个包是 Entity Framework Core Tools 工作所必需的。确保您的目标项目正确,安装包,然后重试。

...尽管它肯定安装在 Data 项目中!

我究竟做错了什么?我实际上需要使用哪种工具?这个项目配置甚至可能吗?

最佳答案

我知道这是一个较旧的帖子,但我在遇到同样的问题时偶然发现了它,所以希望我的解决方案能帮助某人。如果你有一个 .NET 5 或 .NET Core 项目并且你在其中使用了 EF6,下面是如何从 PowerShell 运行迁移:
添加迁移:

cd "your_solution_directory"
$assemblyDirectory = "Test.Project\bin\Debug\net5.0-windows"

& dotnet exec --depsfile "$assemblyDirectory\Test.Project.deps.json" --runtimeconfig "$assemblyDirectory\Test.Project.runtimeconfig.json" packages\EntityFramework.6.4.4\tools\netcoreapp3.0\any\ef6.dll migrations add TestMigrationName --json --verbose --no-color --prefix-output --assembly "$assemblyDirectory\Test.Project.dll" --project-dir Test.Project\ --root-namespace Test.Project --connection-string "Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=DBNAME;Integrated Security=True" --connection-provider "System.Data.SqlClient"
运行迁移:
cd "your_solution_directory"
$assemblyDirectory = "Test.Project\bin\Debug\net5.0-windows"

& dotnet exec --depsfile "$assemblyDirectory\Test.Project.deps.json" --runtimeconfig "$assemblyDirectory\Test.Project.runtimeconfig.json" packages\EntityFramework.6.4.4\tools\netcoreapp3.0\any\ef6.dll database update --target TARGET_MIGRATION_NAME_HERE --verbose --no-color --prefix-output --assembly "$assemblyDirectory\Test.Project.dll" --project-dir Test.Project\ --language C# --root-namespace Test.Project --connection-string "Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=DBNAME;Integrated Security=True" --connection-provider "System.Data.SqlClient"
由于像在 .NET Framework 中一样直接使用 ef6.exe 不起作用,因此这些长命令似乎是唯一的方法。如果您仍然遇到问题并且我的解决方案没有帮助您,请尝试从包管理器控制台运行 Update-Database 或 Add-Migration 命令并添加 --verbose 标志。这将向您显示 Visual Studio 正在运行的确切 PowerShell 命令,您可以在脚本中重用该命令。
此外,您可以让它读取您的 App.Config 文件,但由于某种原因 --configuration 参数被忽略。它始终使用需要存在于程序集目录中的 ef6.dll.config 文件。您可以将构建配置设置为始终将 App.config 文件复制到 ef6.dll.config

关于c# - 无法在 .Net Standard 2.1 项目中添加 EF 6.4 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61269010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com