Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t在.Net标准2.1项目中添加EF 6.4迁移_C#_Entity Framework_Entity Framework 6_Entity Framework Migrations - Fatal编程技术网

C# Can';t在.Net标准2.1项目中添加EF 6.4迁移

C# Can';t在.Net标准2.1项目中添加EF 6.4迁移,c#,entity-framework,entity-framework-6,entity-framework-migrations,C#,Entity Framework,Entity Framework 6,Entity Framework Migrations,我们正处于将大型解决方案移植到.Net Core(从4.7.2开始)的最后阶段,但我们还没有准备好迁移到Entity Framework Core,因为我们使用每类型表层次结构等。我们首先使用EF代码。因此,包含DbContext和EF迁移的项目现在正在运行.netstandard2.1并引用EF6.4(从v6.3开始,它显然支持.NETCore)。我知道EF工具已从v6.2->v6.4更改,因此我们创建EF迁移的传统方法现在导致Package Manager控制台中出现以下错误: 添加迁移测试

我们正处于将大型解决方案移植到.Net Core(从4.7.2开始)的最后阶段,但我们还没有准备好迁移到Entity Framework Core,因为我们使用每类型表层次结构等。我们首先使用EF代码。因此,包含DbContext和EF迁移的项目现在正在运行.netstandard2.1并引用EF6.4(从v6.3开始,它显然支持.NETCore)。我知道EF工具已从v6.2->v6.4更改,因此我们创建EF迁移的传统方法现在导致Package Manager控制台中出现以下错误:

添加迁移测试-项目数据

项目“数据”以框架.NETStandard为目标。实体框架包管理器控制台工具不支持此框架。

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

dotnet ef迁移添加测试--项目数据--启动项目数据\u启动-c自定义上下文

未找到名为“CustomContext”的DbContext。

这看起来至少是在尝试迁移,但我现在被卡住了。我尝试过用名称空间完全限定DbContext,并将DbContext类作为“链接文件”添加到新的虚拟项目中,但我遇到了相同的错误

我还尝试使用EF 6.4工具: dotnet C:\Users\xxxx.nuget\packages\entityframework\6.4.0\tools\netcoreapp3.0\any\ef6.dll“迁移添加测试--程序集数据

您的目标项目“数据”未引用EntityFramework。该软件包是EntityFramework核心工具正常工作所必需的。请确保您的目标项目正确无误,安装该软件包,然后重试。

…尽管它肯定安装在数据项目中

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

终于破解了它

首先,尽管我从微软那里读到了很多东西,但似乎这个项目配置是不可能的。我将数据项目升级到了netcoreapp3.1(意味着升级到解决方案中的所有其他项目!),解决了目标和DB上下文位置错误。我最终使用了来自Package Manager控制台的以下命令:

添加迁移测试-connectionString“SERVER=(local);数据库=xxxx;integratedsecurity=true“-connectionProvider”System.Data.SqlClient”

有趣的是,使用verbose标志运行上述命令表明它实际上正在运行我最初尝试的命令之一:dotnet C:\Users\xxxx.nuget\packages\entityframework\6.4.0\tools\netcoreapp3.0\any\ef6.dll migrations add Test命令,但显式运行此命令会失败,出现常见错误

您的目标项目“数据”未引用EntityFramework。此包是EntityFramework核心工具正常工作所必需的。

…所以我不知道为什么添加迁移别名会起作用


此外,许多本应使用ef 6.4工具(列出)的参数实际上也不起作用(例如“--connection string”实际上是“-connectionString”),但谢天谢地,上面的命令工作得很好。简言之,EF 6.4工具的文档非常混乱。希望这些发现对处于同样令人痛苦沮丧的情况下的任何其他人都有用。

您也可以临时将目标框架更改为
net48
ode>netcoreapp3.1在运行命令时。

我知道这是一篇较老的帖子,但在遇到同样的问题时我偶然发现了它,所以希望我的解决方案能够帮助他人。如果您有一个.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无法工作,因此这些长命令似乎是唯一的方法。如果您仍然存在问题,而我的解决方案对您没有帮助,请尝试从软件包管理器控制台运行更新数据库或添加迁移命令,并添加--verbose标志。这将显示确切的PowerShell逗号nd由Visual Studio运行,您可以在脚本中重用它


此外,您可以让它读取您的App.Config文件,但由于某些原因,--configuration参数被忽略。它始终使用需要存在于程序集目录中的ef6.dll.Config文件。您可以设置生成配置,以便始终将App.Config文件复制到ef6.dll.Config

您应该将上下文包括在新文件中控制台应用程序之后,它将使用您提供的命令查找您的上下文。我已经尝试过了,结果是相同的行为-无论DB上下文是作为链接文件还是具体文件添加的。@NickH您的链接是针对EF Core cli的,而不是针对EF 6的。4@smg抱歉-您是对的,尽管我已经尝试使用旧版本我更新了这个问题以反映这一点。非常感谢!我不得不稍微调整一下,使它能够工作,主要是让depsfile和runtimeconfig指向我的测试项目,所有其他dll和目录引用我的数据项目。除此之外,它工作得非常好。