EntityTypeBuilder在EF Core中不包含ToTable的定义


78

我有以下示例代码:

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

我在MS网站上测试了一些示例,但找不到ToTable方法。在该示例中,我检查了Usings的使用情况,除了使用他正在使用的模型的类项目之外,Using示例中只有Microsoft.EntityFrameworkCore。这改变了吗?我现在该怎么做?


34
确保您已引用Microsoft.EntityFrameworkCore.Relational程序集。可以使用-所讨论的方法是该程序集中名称空间RelationalEntityTypeBuilderExtensions下的类中定义的扩展方法Microsoft.EntityFrameworkCore
伊万·斯托夫

Answers:



14

您应该添加nuget包Microsoft.EntityFrameworkCore.SqlServer,因为这是Microsoft SQL方法。


9

我遇到了这个问题,但是不需要安装:

Microsoft.EntityFrameworkCore.Relational

我只是退出了VS 2017,然后重新打开了我的解决方案。我安装了以下NuGet软件包:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools

以及以下CLI工具参考:

Microsoft.EntityFrameworkCore.Tools.DotNet

6

伊万(Ivan)和马多(Mardoxx)是正确的。

我试图只是安装Microsoft.EntityFrameworkCore.Tools 然后出现此错误:

检测到的包降级:Microsoft.EntityFrameworkCore从2.1.4降到2.1.1。直接从项目中引用包以选择其他版本。-> 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. 我通过nuget升级了Microsoft.EntityFrameworkCore
  2. 我确实安装了Microsoft.EntityFrameworkCore.Tools,该工具不适用于ToTable,是否需要甚至不知道
  3. 然后安装了Microsoft.EntityFrameworkCore.Relational ,现在可以解决了

1
我还按照您的步骤操作,并已从netcoreapp2.1升级<TargetFramework> netcoreapp3.0 </ TargetFramework>,现在已成功安装Microsoft.EntityFrameworkCore.Tools和Microsoft.EntityFrameworkCore.Relational,但using语句在Microsoft之后未显示“ Relational”名称空间。 EntityFrameworkCore,因此我无法使用MapToStoredProcedures:S
Samra,

4

从EF6移植到EFCore,我们遇到了这个问题。我们的事业是.HasKey现在返回一个KeyBuilder.ToTable不能对其进行操作。因此,扭转了效果。

就是 是:

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

成为:

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

现在工作,就是我的工作了。
MDave

3

对于net core 3.1,需要安装以下软件包:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational

2

对于EFCore 3.1,我需要在数据库上下文中使用它:

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

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

无需其他Nuget程序包。


1

确保在“默认项目”下拉列表中选择了正确的项目,然后在下面键入命令:

install-package microsoft.entityframeworkcore.sqlserver

0

对我来说,我的问题是我尝试错误地调用ToView()。

我在做:

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

代替:

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

0

解决方案中也可能存在版本差异,因此,例如,如果依赖项链中的一个项目的3.1版本为,EF Core而另一个项目的版本为2.1,那么您还将看到此错误,无论您安装了什么,都会赢不起作用,而是确保它们在整个解决方案中是相同的版本。



0

根据您使用的.Net版本。Microsoft.EntityFrameworkCore.Tools.DotNet仅支持.NetStandard> = 2.0。

如果您的.Net版本为4.6.1,请更新Microsoft.EntityFrameworkCore至2.0.0-preview1-final及其相关的EntityFramework DLL,然后关闭Visual Studio 2017并重新打开。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.