我有这个示例代码:
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 方法。在示例中,我检查了使用是什么,除了他正在使用的模型的类项目之外,示例中唯一的使用是 Microsoft.EntityFrameworkCore。这是改变了吗?我现在该怎么做?
安装
Microsoft.EntityFrameworkCore.Relational
是正确的解决方案,正如 Ivan 所说。
您应该添加 nuget 包
Microsoft.EntityFrameworkCore.SqlServer
,因为这是 Microsoft SQL 方法。
我遇到了这个问题,但不需要安装:
Microsoft.EntityFrameworkCore.Relational
我只是退出 VS 2017 并重新打开我的解决方案。 我安装了以下 NuGet 软件包:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
以及以下 CLI 工具参考:
Microsoft.EntityFrameworkCore.Tools.DotNet
对于net core 3.1,需要安装这些包:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational
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)
ToTable
不起作用,不知道是否需要这样做Microsoft.EntityFrameworkCore.Relational
,现在解决了从 EF6 移植到 EFCore,我们遇到了这个问题。我们的原因是
.HasKey
现在返回 KeyBuilder
并且 .ToTable
不对其进行操作。所以逆转就有效了。
即。是:
mp.HasKey(m => m.Id)
.ToTable("Table")
成为:
mp.ToTable("Table")
.HasKey(m => m.Id);
对于 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 包。
对我来说,我的问题是我试图错误地调用 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");
});
确保在“默认项目”下拉列表中选择正确的项目,然后键入以下命令:
install-package microsoft.entityframeworkcore.sqlserver
安装
Microsoft.EntityFrameworkCore
,MicrosoftEntityFramworkCore.Tools
,最后Microsoft.EntityFrameworkCore.SqlServer
您的解决方案也可能存在版本差异,例如,如果您的依赖链中的一个项目具有
3.1
版本的 EF Core
,而另一个项目具有 2.1
,那么您也会看到这一点错误,无论你安装什么都不起作用,而是确保它们在整个解决方案中是相同的版本。
取决于您使用的 .Net 版本。
Microsoft.EntityFrameworkCore.Tools.DotNet
仅支持 .NetStandard >= 2.0。
如果您的 .Net 版本是 4.6.1,请将
Microsoft.EntityFrameworkCore
更新到 2.0.0-preview1-final,以及相关的 EntityFramework DLL,然后关闭 Visual Studio 2017 并重新打开。
请安装Microsoft.EntityFrameworkCore.Tools包 并写下:
builder.ToTable("tblName");
我也遇到了同样的问题。
解决方案:对我来说安装
Microsoft.EntityFrameworkCore.Sqlserver
解决了问题。
附加信息: 我先安装了
Microsoft.EntityFrameworkCore.Tools
。但这并不能解决问题。因为这个包的目的不同。这个包执行以下操作 -
Enables these commonly used commands:
Add-Migration
Bundle-Migration
Drop-Database
Remove-Migration
Update-Database
检查此链接了解有关
Microsoft.EntityFrameworkCore.Tools
的更多信息