我有这个示例代码:
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,除了他正在使用的模型的类项目。这改变了吗?我现在该怎么做?
答案 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)
ToTable
,甚至还不需要安装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