EF Core 2 迁移方法不在数据库中创建表
EF Core 2 Migrate method doesn't create tables in DB
我有 .netcore 2.0
应用 N-Tier Architecture
,我已经在 Data Access Layer
中实现了 ApplicationDbContext
...现在我正在尝试添加新的 Entities
,例如我创建了实体 Test2
:
namespace MyProject.Domain
{
public class Test2
{
public int Id { get; set; }
public string FirstName { get; set; }
}
}
然后我在ApplicationDbContext
中添加了DbSet
:
namespace MyProject.Infrastructure.Implementation.MySql.Contexts
{
public class ApplicationDbContext : DbContext, IApplicationDbContext
{
private readonly IConfiguration _configuration;
public ApplicationDbContext(IConfiguration configuration)
{
_configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql(
_configuration.GetConnectionString("MySql"));
}
public DbSet<Test> Test { get; set; }
public DbSet<Test2> Test2 { get; set; }
}
}
然后我在BaseEnfine.cs
中调用了.Migrate()
方法:
namespace MyProject.Infrastructure.Implementation.MySql
{
public class BaseEngine : IBaseEngine
{
private readonly ApplicationDbContext _context;
protected ApplicationDbContext Db => _context;
protected BaseEngine(ApplicationDbContext context)
{
_context = context;
if (!_context.Database.EnsureCreated())
{
_context.Database.Migrate();
_context.Database.EnsureCreated();
}
}
}
}
但是当我刷新数据库时没有table Test2
..
有什么想法吗?
您应该先添加迁移,然后再迁移您的数据库。
有两种方式:
使用包管理器控制台:
Add-Migration InitialMigration
使用 dotnet
CLI:
将以下代码添加到您的 .csproj 文件中:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.1" />
</ItemGroup>
cd
使用命令行和 运行
到您的项目目录
运行 dotnet ef migrations add InitialMigration
在大多数情况下,最好不要在您的应用中应用迁移。您可以使用 CLI 迁移数据库或生成迁移脚本。
dotnet ef database update
dotnet ef migrations script
在 MSDN
上阅读有关 dotnet ef
的更多信息
确保 dotnet
已添加到 PATH。
我遇到了同样的问题,解决方法如下。我正在使用 entityframeworkcore。
首先 运行 来自程序包管理器控制台的此命令
Update-Database -Migration 0
然后使用此命令删除所有迁移
Remove-Migration
然后像这样创建迁移
Add-Migration initial_migration
最后运行更新命令
Update-Database
我有 .netcore 2.0
应用 N-Tier Architecture
,我已经在 Data Access Layer
中实现了 ApplicationDbContext
...现在我正在尝试添加新的 Entities
,例如我创建了实体 Test2
:
namespace MyProject.Domain
{
public class Test2
{
public int Id { get; set; }
public string FirstName { get; set; }
}
}
然后我在ApplicationDbContext
中添加了DbSet
:
namespace MyProject.Infrastructure.Implementation.MySql.Contexts
{
public class ApplicationDbContext : DbContext, IApplicationDbContext
{
private readonly IConfiguration _configuration;
public ApplicationDbContext(IConfiguration configuration)
{
_configuration = configuration;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql(
_configuration.GetConnectionString("MySql"));
}
public DbSet<Test> Test { get; set; }
public DbSet<Test2> Test2 { get; set; }
}
}
然后我在BaseEnfine.cs
中调用了.Migrate()
方法:
namespace MyProject.Infrastructure.Implementation.MySql
{
public class BaseEngine : IBaseEngine
{
private readonly ApplicationDbContext _context;
protected ApplicationDbContext Db => _context;
protected BaseEngine(ApplicationDbContext context)
{
_context = context;
if (!_context.Database.EnsureCreated())
{
_context.Database.Migrate();
_context.Database.EnsureCreated();
}
}
}
}
但是当我刷新数据库时没有table Test2
..
有什么想法吗?
您应该先添加迁移,然后再迁移您的数据库。 有两种方式:
使用包管理器控制台:
Add-Migration InitialMigration
使用
dotnet
CLI:将以下代码添加到您的 .csproj 文件中:
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" /> </ItemGroup>
到您的项目目录cd
使用命令行和 运行运行
dotnet ef migrations add InitialMigration
在大多数情况下,最好不要在您的应用中应用迁移。您可以使用 CLI 迁移数据库或生成迁移脚本。
dotnet ef database update
dotnet ef migrations script
在 MSDN
上阅读有关dotnet ef
的更多信息
确保 dotnet
已添加到 PATH。
我遇到了同样的问题,解决方法如下。我正在使用 entityframeworkcore。 首先 运行 来自程序包管理器控制台的此命令
Update-Database -Migration 0
然后使用此命令删除所有迁移
Remove-Migration
然后像这样创建迁移
Add-Migration initial_migration
最后运行更新命令
Update-Database