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?


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:



13

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


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

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

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

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

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.


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

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.


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

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.


0

Installieren

  • Microsoft.EntityFrameworkCore,
  • MicrosoftEntityFramworkCore.Tools, und schlussendlich
  • Microsoft.EntityFrameworkCore.SqlServer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.