web-dev-qa-db-fra.com

EntityTypeBuilder ne contient pas de définition pour ToTable dans EF Core

J'ai cet exemple de code:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Models;

namespace MySampleNamespace
{
    public class MyDbContext : DbContext
    {
        public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }

        public DbSet<User> Users { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            new UserMap(modelBuilder.Entity<User>());
        }

        public class UserMap
        {
            public UserMap(EntityTypeBuilder<User> entityBuilder)
            {
                entityBuilder.ToTable("User");
                entityBuilder.Property(s => s.Username).HasMaxLength(15).IsRequired();
            }
        }
    }
}

Je testais des exemples du site Web MS, mais je ne trouve pas la méthode ToTable. Dans l'exemple, j'ai vérifié quelles étaient les utilisations et le seul exemple utilisé est Microsoft.EntityFrameworkCore en dehors du projet de classe du modèle utilisé. Cela a-t-il changé? Comment je fais ça maintenant?

25
g_b

Installer Microsoft.EntityFrameworkCore.Relational est la bonne solution, comme le dit Ivan.

54
Mardoxx

J'ai eu ce problème, mais je n'ai pas eu besoin d'installer:

Microsoft.EntityFrameworkCore.Relational

J'ai simplement quitté VS 2017 et rouvert ma solution ..__ Les packages NuGet suivants étaient installés:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools

Et la référence d'outil CLI suivante:

Microsoft.EntityFrameworkCore.Tools.DotNet
5
GreenyMcDuff

Ivan et Mardoxx ont raison. 

J'ai essayé d'installer simplement Microsoft.EntityFrameworkCore.Tools puis j'ai eu cette erreur:

Déclassement de paquet détecté: Microsoft.EntityFrameworkCore de 2.1.4 à 2.1.1. Référencez le package directement à partir du projet pour sélectionner une version différente. -> Microsoft.EntityFrameworkCore.Tools 2.1.4 -> Microsoft.EntityFrameworkCore.Design 2.1.4 -> Microsoft. 2.1.1) 

  1. J'ai mis à niveau Microsoft.EntityFrameworkCore via nuget
  2. J'ai installé Microsoft.EntityFrameworkCore.Tools, qui ne fonctionnait pas pour ToTable, sans savoir si cela est nécessaire
  3. J'ai ensuite installé le Microsoft.EntityFrameworkCore.Relational et le problème est maintenant résolu.
1
Tom Stickel

Porter de EF6 à EFCore, nous avons eu ce problème. Notre cause était .HasKey renvoie maintenant une KeyBuilder et le .ToTable n'y fonctionne pas. Donc, inverser cela a fonctionné.

C'est à dire. Était:

mp.HasKey(m => m.Id)
  .ToTable("Table")

Est devenu:

mp.ToTable("Table")
  .HasKey(m => m.Id);
1
Pasi Savolainen

Selon votre version .Net Core que vous utilisez. Microsoft.EntityFrameworkCore.Tools.DotNet prend uniquement en charge .NetStandard> = 2.0.

Si votre version .Net Core est 4.6.1, mettez à jour Microsoft.EntityFrameworkCore vers 2.0.0-preview1-final, ainsi que les DLL EntityFramework associées, puis fermez Visual Studio 2017 et rouvrez-le. 

0
mcemmy