EntityTypeBuilder不包含EF Core中ToTable的定义

g_b*_*g_b 41 entity-framework entity-framework-core

我有这个示例代码:

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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在MS网站上测试了一些例子,但我找不到ToTable方法.在这个例子中,我检查了什么是Usings,唯一使用的例子是Microsoft.EntityFrameworkCore,除了他正在使用的模型的类项目.这改变了吗?我现在该怎么办?

Mar*_*oxx 94

Microsoft.EntityFrameworkCore.Relational正如Ivan所说,安装是正确的解决方案.


小智 15

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


Mar*_*ach 7

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

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

        foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes())
        {
            entity.SetTableName("WS_" + entity.GetTableName());
        }
    }
Run Code Online (Sandbox Code Playgroud)

不需要额外的 Nuget 包。


Tom*_*kel 6

伊万和马尔多克斯是正确的。

我试图只是安装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 ,现在可以解决了


Gre*_*uff 5

我有这个问题,但不需要安装:

Microsoft.EntityFrameworkCore.Relational
Run Code Online (Sandbox Code Playgroud)

我只是退出VS 2017并重新打开我的解决方案.我安装了以下NuGet包:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Run Code Online (Sandbox Code Playgroud)

以下CLI工具参考:

Microsoft.EntityFrameworkCore.Tools.DotNet
Run Code Online (Sandbox Code Playgroud)


Pas*_*nen 5

从 EF6 移植到 EFCore,我们遇到了这个问题。我们的原因.HasKey现在是返回 aKeyBuilder并且.ToTable不对其进行操作。所以逆转是有效的。

IE。曾是:

mp.HasKey(m => m.Id)
  .ToTable("Table")
Run Code Online (Sandbox Code Playgroud)

变成:

mp.ToTable("Table")
  .HasKey(m => m.Id);
Run Code Online (Sandbox Code Playgroud)


小智 5

安装

  • Microsoft.EntityFrameworkCore,
  • MicrosoftEntityFramworkCore.Tools,最后
  • Microsoft.EntityFrameworkCore.SqlServer


小智 5

对于 net core 3.1,需要安装这些包:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational
Run Code Online (Sandbox Code Playgroud)