6 votes

Est-il possible d'utiliser Entity Framework 6.3.0 dans une bibliothèque de classes .NET Standard 2.0 ?

Est-il possible d'utiliser Entity Framework 6.3.0 dans une bibliothèque de classes .NET Standard 2.0 ?

En Dependencies -> Packages J'ai une référence à Entity Framework 6.3.0

Et j'ai un code comme celui-ci :

using System.Data.Entity;

public partial class AlertContext : DbContext

Mais je reçois les erreurs suivantes :

Le nom de type ou d'espace de nom 'Entity' n'existe pas dans l'espace de nom. System.Data' (il vous manque une référence d'assemblage ?)

Le nom du type ou de l'espace de nom 'DbContext' n'a pas pu être trouvé. une directive using ou une référence d'assemblage).

13voto

Stephen Kennedy Points 1458

6.3.0 était la première version d'Entity Framework 6 à cibler la norme .NET ; elle cible la norme .NET. 2.1 en même temps que .NET 4.0 et .NET 4.5, comme on peut le voir dans sa liste Nuget . 6.2.0 ne visait que .NET.

Notez que la norme .NET 2.0 est encore pas une cible valable.

En fonction de votre scénario, vous puede Vous pouvez vous en sortir en ciblant plusieurs fois votre bibliothèque sur .NET (dans mon exemple ci-dessous, .NET 4.7.2) et .NET Standard 2.1 :

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>   
    <TargetFrameworks>net472;netstandard2.1</TargetFrameworks>
  </PropertyGroup>
</Project>

La viabilité de cette solution dépend de deux facteurs :

  • Vos autres références. La combinaison que je propose ci-dessus conviendra dans la plupart des cas, car .NET 4.7.2 et .NET Standard 2.1 peuvent faire référence aux paquets .NET Standard 2.0, qui couvrent la plupart des paquets modernes, mais pas tous.

  • Les frameworks à partir desquels vous souhaitez consommer votre bibliothèque. La cible .NET signifie, bien entendu, que la bibliothèque peut être utilisée par des projets .NET Framework de la même version ou d'une version supérieure. La cible .NET Standard 2.1 permet à la bibliothèque d'être consommée par des projets ciblant .NET Standard 2.1, .NET Core 3.0, Mono 6.4 et plus, ainsi que les dernières versions de Xamarin. Les versions de .NET Core antérieures à la version 3.0 constituent une omission notable. EF6 est pas disponible pour .NET Core 1 ou 2. Voir la norme .NET Prise en charge de la mise en œuvre de .NET pour la liste complète.

* J'ai utilisé .NET 4.7.2 pour mon illustration car, bien que .NET 4.6.1 prenne officiellement en charge la norme .NET 2.0, Microsoft recommande d'utiliser 4.7.2 ou une version plus récente. Voir <a href="https://stackoverflow.com/a/57024056/397817">ma réponse ici </a>pour plus d'informations.

-1voto

tiemby Points 19

J'ai trouvé deux alternatives :

  1. rétrograder EF vers une version inférieure (6.2) ou
  2. Nuget, installez Microsoft.EntityFrameworkCore et utilisez le fichier : using Microsoft.EntityFrameworkCore; public partial class AlertContext : DbContext

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X