EntityTypeBuilder不包含EF Core中ToTable的定义

时间:2017-04-04 06:50:13

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

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

12 个答案:

答案 0 :(得分:64)

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

答案 1 :(得分:5)

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

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools

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

Microsoft.EntityFrameworkCore.Tools.DotNet

以下CLI工具参考:

Provider name

答案 2 :(得分:3)

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,它现在可以解决

答案 3 :(得分:3)

需要添加包(nuget)Microsoft.EntityFrameworkCore.SqlServer 因为这是MS Sql方法

答案 4 :(得分:3)

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

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational

答案 5 :(得分: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程序包。

答案 6 :(得分:1)

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

IE中。是:

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

变成了:

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

答案 7 :(得分:1)

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

install-package microsoft.entityframeworkcore.sqlserver

答案 8 :(得分:0)

取决于您使用的.Net Core版本。 Microsoft.EntityFrameworkCore.Tools.DotNet仅支持.NetStandard&gt; = 2.0。

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

答案 9 :(得分: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");                
        });

答案 10 :(得分:0)

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

答案 11 :(得分:0)

安装

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