Je suis nouveau dans le noyau EF et j'essaie de le faire fonctionner avec mon projet principal asp.net.
J'obtiens l'erreur ci-dessus dans mon startup.cs
lorsque j'essaie de configurer dbcontext pour utiliser une chaîne de connexion à partir de config. Je suis ce tutoriel: https://docs.Microsoft.com/en-us/aspnet/core/data/ef-mvc/intro
Le code problématique dans startup.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using tracV2.models;
using tracV2.data;
namespace tracV2
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSingleton<IConfiguration>(Configuration);
string conn = Configuration.GetConnectionString("optimumDB");
services.AddDbContext<tracContext>(options => options.usesqlserver(conn));
}
La méthode usesqlserver
est reconnue si je la mets directement dans le contexte:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace tracV2.data
{
public class tracContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("myrealconnectionstring");
}
Toutes mes recherches en ligne indiquent des références manquantes, mais je n'arrive pas à savoir laquelle me manque (voir image) . références
Toute aide serait grandement appréciée,
Merci
C'est un problème connu dans le système de projet. Voir dotnet/project-system # 1741
Nous installons le package Microsoft.EntityFrameworkCore.SqlServer NuGet.
Microsoft.EntityFrameworkCore.SqlServer
PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ensuite,
services.AddDbContext<AspDbContext>(options =>
options.UseSqlServer(config.GetConnectionString("optimumDB")));
ajout de using Microsoft.EntityFrameworkCore;
résolu manuellement le problème pour moi
Installez ci-dessous le paquet NuGet va résoudre votre problème
Microsoft.EntityFrameworkCore.SqlServer
Package d'installation Microsoft.EntityFrameworkCore.SqlServer
J'utilisais du code Visual Studio.
1) Essayez d’installer le package «Microsoft.EntityFrameworkCore.SqlServer» en spécifiant le numéro de version.
Code VS:
'dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'
Visual Studio:-
'Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'
Reportez-vous au lien ' Le package' Microsoft.EntityFrameworkCore.SqlServer 'est incompatible avec' tous 'les frameworks du projet ' pour le faire.
2) Ajoutez ensuite l'espace de noms 'using Microsoft.EntityFrameworkCore; 'manuellement dans le fichier Startup.cs.
Reportez-vous au lien ci-dessous https://github.com/aspnet/EntityFramework/issues/7891 .
3) Si vous rencontrez un problème de dépendance pour 'Microsoft.EntityFrameworkCore.SqlServer.Design', comme "Le package 'Microsoft.EntityFrameworkCore.Design' est incompatible avec" tous "les frameworks du projet", nous devons exécuter la commande ci-dessous,
Code VS: -
dotnet add package Microsoft.EntityFrameworkCore.Design -v 1.1
Visual Studio
Package d'installation Microsoft.EntityFrameworkCore.Design -v 1.1
Suivez les étapes ci-dessous.
Installez Entity Framework Core Design et le fournisseur de base de données SQL Server pour Entity Framework Core:
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Import Entity Framework Core:
using Microsoft.EntityFrameworkCore;
Et configurez votre DbContext:
var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(connectionString)
);
Je pense que cela peut être résolu en ajoutant une référence de projet à Microsoft.EntityFrameworkCore.SqlServer.Design.
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
Microsoft.EntityFrameworkCore.SqlServer n'était pas directement installé dans mon projet, mais le package .Design l'installera quand même comme condition préalable.
J'ai contourné cela simplement:
Ajoutez SqlServerDbContextOptionsExtensions
à la classe en question Résoudre SqlServerDbContextOptionsExtensions
Cela corrige le problème, il doit manquer une référence par défaut.
Pour asp.net core version 2.1, veillez à ajouter le package suivant pour résoudre le problème. (Au moins, cela corrige le problème en utilisant SQLite)
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
Voici la référence de la documentation utilisant SQLite avec le noyau de la structure d’entité . https://docs.Microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite
Je devais utiliser la ligne
services.AddEntityFrameworkSqlite().AddDbContext<MovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
dans la méthode ConfigureServices dans le fichier Startup.cs
La copie du code suivant dans le fichier TodoApi.csproj à partir de https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi a résolu le même problème.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
</Project>
Microsoft.AspNetCore.All peut être excessif, mais il inclut EntityFrameworkCore