EntityTypeBuilder enthält keine Definition für ToTable in EF Core

76

Ich habe diesen Beispielcode:

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();
            }
        }
    }
}

Ich habe ein Beispiel von der MS-Website getestet, aber ich kann die ToTable-Methode nicht finden. Im Beispiel habe ich die Verwendungszwecke überprüft. Die einzige Verwendung des Beispiels war Microsoft.EntityFrameworkCore, abgesehen vom Klassenprojekt für das von ihm verwendete Modell. Wurde das geändert? Wie mache ich das jetzt?

g_b
quelle
33
Stellen Sie sicher, dass Sie auf Microsoft.EntityFrameworkCore.Relational Assembly verweisen. Die Verwendungen sind in Ordnung - die fragliche Methode ist eine Erweiterungsmethode, die in der RelationalEntityTypeBuilderExtensionsKlasse unter dem Microsoft.EntityFrameworkCoreNamespace in dieser Assembly definiert ist.
Ivan Stoev

Antworten:

172

Die Installation Microsoft.EntityFrameworkCore.Relationalist die richtige Lösung, wie Ivan sagt.

Mardoxx
quelle
1
@GertArnold behoben
Mardoxx
1
HasColumnName ist auch in diesem Nuget-Paket enthalten. Ich habe einen DotNet Framework-Code migriert und dachte, ich würde verrückt. Vielen Dank! nuget.org/packages/Microsoft.EntityFrameworkCore.Relational
granadaCoder
13

Sie sollten das Nuget-Paket hinzufügen Microsoft.EntityFrameworkCore.SqlServer, da dies eine Microsoft SQL-Methode ist.

Aaron
quelle
9

Ich hatte dieses Problem, musste es aber nicht installieren:

Microsoft.EntityFrameworkCore.Relational

Ich habe VS 2017 einfach beendet und meine Lösung erneut geöffnet. Ich hatte die folgenden NuGet-Pakete installiert:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools

Und die folgende CLI-Tool-Referenz:

Microsoft.EntityFrameworkCore.Tools.DotNet
GreenyMcDuff
quelle
6

Ivan & Mardoxx sind richtig.

Ich habe versucht, nur zu installieren, Microsoft.EntityFrameworkCore.Tools dann bekam ich diesen Fehler:

Erkanntes Downgrade des Pakets: Microsoft.EntityFrameworkCore von 2.1.4 auf 2.1.1. Verweisen Sie direkt aus dem Projekt auf das Paket, um eine andere Version auszuwählen. -> Microsoft.EntityFrameworkCore.Tools 2.1.4 -> Microsoft.EntityFrameworkCore.Design 2.1.4 -> Microsoft.EntityFrameworkCore.Relational 2.1.4 -> Microsoft.EntityFrameworkCore (> = 2.1.4) -> Microsoft.EntityFrameworkCore (> = 2.1.1)

  1. Ich habe Microsoft.EntityFrameworkCore über Nuget aktualisiert
  2. Ich habe Microsoft.EntityFrameworkCore.Tools installiert, für das es nicht funktioniert ToTablehat. Unbekannt, ob dies überhaupt benötigt wird
  3. Ich habe dann das installiert Microsoft.EntityFrameworkCore.Relational und es wird jetzt aufgelöst
Tom Stickel
quelle
1
Ich habe auch Ihre Schritte befolgt und <TargetFramework> netcoreapp3.0 </ TargetFramework> von netcoreapp2.1 aktualisiert. Microsoft.EntityFrameworkCore.Tools und Microsoft.EntityFrameworkCore.Relational wurden erfolgreich installiert, aber die using-Anweisung zeigt nach Microsoft keinen "relationalen" Namespace an. EntityFrameworkCore und daher kann ich MapToStoredProcedures nicht verwenden: S
Samra
4

Bei der Portierung von EF6 nach EFCore hatten wir dieses Problem. Unsere Sache war .HasKeyjetzt Rückkehr ein KeyBuilderund das .ToTablefunktioniert nicht daran. Das hat also funktioniert.

Dh. War:

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

Wurde:

mp.ToTable("Table")
  .HasKey(m => m.Id);
Pasi Savolainen
quelle
Jetzt arbeiten, das war es für mich.
MDave
3

Für Net Core 3.1 müssen folgende Pakete installiert werden:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational
Jhonnatan Eduardo
quelle
2

Für EFCore 3.1 musste ich dies in meinem DB-Kontext verwenden:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes())
        {
            entity.SetTableName("WS_" + entity.GetTableName());
        }
    }

Es war kein zusätzliches Nuget-Paket erforderlich.

Mark Roach
quelle
1

Stellen Sie sicher, dass das richtige Projekt in der Dropdown-Liste "Standardprojekt" ausgewählt ist, und geben Sie den folgenden Befehl ein:

install-package microsoft.entityframeworkcore.sqlserver
Saikumar Yerra
quelle
0

Abhängig von Ihrer verwendeten .Net Core-Version. Microsoft.EntityFrameworkCore.Tools.DotNetunterstützt nur .NetStandard> = 2.0.

Wenn Ihre .Net Core-Version 4.6.1 ist, aktualisieren Sie Microsoft.EntityFrameworkCoresie zusammen mit den zugehörigen EntityFramework-DLLs auf 2.0.0-Preview1-Final. Schließen Sie dann Visual Studio 2017 und öffnen Sie es erneut.

mcemmy
quelle
0

Für mich war mein Problem, dass ich versucht habe, ToView () falsch aufzurufen.

Ich habe getan:

 modelBuilder.Query<Vendor>(entity =>
        {
            entity.Property(v => v.VendorId).HasColumnName("VendorID");
            entity.Property(v => v.Name).HasColumnName("Vendor Name");                
        }).ToView("vwVendors");

anstatt:

modelBuilder.Query<Vendor>(entity =>
        {
            entity.ToView("vwVendors");
            entity.Property(v => v.VendorId).HasColumnName("VendorID");
            entity.Property(v => v.Name).HasColumnName("Vendor Name");                
        });
Eric
quelle
0

Es ist auch möglich, dass Ihre Lösung Versionsunterschiede aufweist. Wenn beispielsweise eines der Projekte in Ihrer Abhängigkeitskette eine 3.1Version von EF Coreund ein anderes Projekt eine hat 2.1, wird dieser Fehler ebenfalls angezeigt, und unabhängig davon, was Sie installieren, hat er gewonnen funktionieren nicht, stellen Sie stattdessen sicher, dass sie in der gesamten Lösung dieselbe Version haben.

Serj Sagan
quelle
0

Installieren

  • Microsoft.EntityFrameworkCore,
  • MicrosoftEntityFramworkCore.Tools, und schlussendlich
  • Microsoft.EntityFrameworkCore.SqlServer
Surendra Mishra
quelle