System.InvalidOperationException: «Поставщик базы данных попытался зарегистрировать реализацию службы «IRelationalTypeMappingSource». Это не служба, определенная Entity Framework, и поэтому ее необходимо зарегистрировать как службу конкретного поставщика с помощью метода «TryAddProviderSpecificServices».
Это исключение, когда я запускаю страницу с DbContext.
Сайт Razor Pages.
Веб-сайт работал хорошо, и я ничего не менял, и теперь это произошло.
Вот .csproj
<Project Sdk = "Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.Bcl.AsyncInterfaces" Version = "1.0.0" />
<PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "5.0.0" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "3.1.10" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.Tools" Version = "3.1.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include = "Microsoft.VisualStudio.Web.CodeGeneration.Design" Version = "3.1.4" />
<PackageReference Include = "Microsoft.Windows.Compatibility" Version = "5.0.0" />
</ItemGroup>
</Project>
Кто-нибудь знает, как решить эту проблему?
Вы смешиваете версии и ссылаетесь на слишком много пакетов. изменить на это:
<ItemGroup>
<PackageReference Include = "Microsoft.Bcl.AsyncInterfaces" Version = "1.0.0" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "3.1.10" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.Tools" Version = "3.1.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include = "Microsoft.VisualStudio.Web.CodeGeneration.Design" Version = "3.1.4" />
<PackageReference Include = "Microsoft.Windows.Compatibility" Version = "3.1.1" />
</ItemGroup>
Следует отметить, что EF Core 5.x поддерживается DotNetCore 3.x, поэтому вы также можете повышать, а не понижать версии.
У меня была такая же проблема, и исправил ее так:
В файле (Project).csproj я комментирую эти строки.
PackageReference Include = "Microsoft.Bcl.AsyncInterfaces" Version = "5.0.0"
PackageReference Include = "Microsoft.EntityFrameworkCore" Version = "5.0.6"
PackageReference Include = "Microsoft.VisualStudio.Web.CodeGeneration.Design" Version = "3.1.5"
Это будет работать правильно
<Project Sdk = "Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version = "3.1.4" />
<PackageReference Include = "Microsoft.AspNetCore.Identity.UI" Version = "3.1.10" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.SqlServer" Version = "3.1.21" />
<PackageReference Include = "Microsoft.EntityFrameworkCore.Tools" Version = "3.1.21">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include = "Microsoft.VisualStudio.Web.CodeGeneration.Design" Version = "3.1.5" />
</ItemGroup>
</Project>
Упомянутая версия EF Core (5) несовместима с другими упомянутыми версиями компонентов EFC (3). Здесь
Include = "Microsoft.EntityFrameworkCore" Version = "5.0.0"
замените5.0.0
на3.1.10
, как и в других местах. Или наоборот.