使用EF Core执行数据库迁移时遇Microsoft.Data.SqlClient平台不支持错误
问题场景
使用.NET Core 7且所有依赖已更新,执行dotnet ef database update命令时编译成功,但抛出平台不支持异常,错误信息如下:
Build started... Build succeeded.
System.PlatformNotSupportedException: Microsoft.Data.SqlClient is not supported on this platform.
at Microsoft.Data.SqlClient.SqlConnection..ctor(String connectionString)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerConnection.CreateDbConnection()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.get_DbConnection()
at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.<>c__DisplayClass18_0.b__0(DateTime giveUp)
at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_02.<Execute>b__0(DbContext _, TState s) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, TState state, Func2 operation, Func`2 verifySucceeded)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Exists(Boolean retryOnNotExists)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerDatabaseCreator.Exists()
at Microsoft.EntityFrameworkCore.Migrations.HistoryRepository.Exists()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String connectionString, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String connectionString, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)Microsoft.Data.SqlClient is not supported on this platform.
项目的.csproj文件内容:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <UserSecretsId>2f7cbad2-b9a5-49ce-ac90-3ec6f5ce8200</UserSecretsId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.10"> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.10" /> <PackageReference Include="MinimalApis.Extensions" Version="0.11.0" /> </ItemGroup> </Project>
解决方法
- 确认运行平台兼容性:执行
dotnet --info查看当前操作系统和.NET SDK版本,确保使用的是Microsoft.Data.SqlClient支持的平台(避免ARM32等小众架构)。 - 显式引入Microsoft.Data.SqlClient包:在
.csproj的<ItemGroup>中添加对应版本的包引用,版本需与Microsoft.EntityFrameworkCore.SqlServer保持一致(7.0.10):<PackageReference Include="Microsoft.Data.SqlClient" Version="7.0.10" /> - 指定工具运行架构:如果是ARM架构设备(如M系列Mac),执行迁移命令时显式指定架构:
dotnet ef database update --arch x64 - 更新dotnet ef全局工具:执行命令更新工具至与项目匹配的.NET 7版本:
dotnet tool update --global dotnet-ef - 清理重建项目:删除项目目录下的
bin和obj文件夹,然后执行:
完成后重新运行迁移命令。dotnet clean && dotnet build
内容的提问来源于stack exchange,提问作者Melza SacZ

