EntityTypeBuilder 不包含 EF 核中 ToTable 的定义

我有这个样本代码:

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 方法。在这个例子中,我检查了 Using 是什么,只有使用的例子是 Microsoft。EntityFrameworkCore,除了他正在使用的模型的类项目之外。这里变了吗?我现在该怎么做?

82386 次浏览

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

Microsoft.EntityFrameworkCore.Relational

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

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools

以下 CLI 工具参考:

Microsoft.EntityFrameworkCore.Tools.DotNet

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

如果你。Net 版本是4.6.1,将 Microsoft.EntityFrameworkCore更新为2.0.0-preview1-final,同时还有相关的 EntityFramework DLL,然后关闭 Visual Studio 2017并重新打开。

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

从 EF6移植到 EFCore 时,我们遇到了这个问题。我们的原因是 .HasKey现在返回一个 KeyBuilder.ToTable不操作它。所以反过来也有用。

曾经是:

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

成为:

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

伊万和马多克斯是对的。

我试图只安装 Microsoft.EntityFrameworkCore.Tools,然后得到这个错误:

检测到软件包降级: Microsoft。EntityFrameworkCore 从2.1.4到2.1.1。直接从项目引用包以选择不同的版本。 - > 微软。实体框架核心。工具2.1.4-> 微软。实体框架核心。Design 2.1.4-> Microsoft 设计2.1.4-> 微软。实体框架核心。关系2.1.4-> 微软。EntityFrameworkCore (> = 2.1.4)-> Microsoft.EntityFrameworkCore (> = 2.1.1)

  1. 我通过 nuget 升级了微软的.EntityFrameworkCore
  2. 我确实安装了 Microsoft.EntityFrameworkCore.Tools,这些工具在 ToTable中不起作用,甚至不知道是否需要它们
  3. 然后我安装了 Microsoft.EntityFrameworkCore.Relational,它现在解决

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

对我来说,我的问题是我试图错误地调用 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");
});

解决方案中也可能存在版本差异,例如,如果依赖关系链中的一个项目有 3.1版本的 EF Core,而另一个项目有 2.1,那么您也会看到这个错误,无论您安装什么,它都不会工作,相反,请确保它们在整个解决方案中是相同的版本。

对于 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 软件包。

安装

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

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

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational

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

install-package microsoft.entityframeworkcore.sqlserver