C# 重新创建的方法无法在数据库中创建新表

C# 重新创建的方法无法在数据库中创建新表,c#,.net,entity-framework-core,C#,.net,Entity Framework Core,我正在使用context.Database.recreated()根据Mac OS上的实体自动映射和创建表。但是,它不会为新创建的新实体创建新表 当我运行以下代码时,我在db中看到3个表。但是当我添加Battle.cs并取消注释时- public DbSet<Battle> Battles { get; set; } DbContext- 公共类武士上下文:DbContext { 公共数据库集武士{get;set;} 公共数据库集引号{get;set;} 公共数据库集族{get;s

我正在使用
context.Database.recreated()
根据Mac OS上的实体自动映射和创建表。但是,它不会为新创建的新实体创建新表

当我运行以下代码时,我在db中看到3个表。但是当我添加
Battle.cs
并取消注释时-

public DbSet<Battle> Battles { get; set; }
DbContext-

公共类武士上下文:DbContext
{
公共数据库集武士{get;set;}
公共数据库集引号{get;set;}
公共数据库集族{get;set;}
//公共数据库集{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
optionsBuilder.UseMySQL(@“Server=localhost;port=3306;Database=exercise;Uid=root;Pwd=password;allowPubliceRetrieval=true;”);
基本配置(选项生成器);
}
}
战斗
模型-

公共类战斗
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共日期时间起始日期{get;set;}
公共日期时间结束日期{get;set;}
}
节目-

类程序
{
私有静态SamuraiContext上下文=新SamuraiContext();
静态void Main(字符串[]参数)
{
context.Database.recreated();
}
}

正如Jeremy评论的那样,
EnsureCreated()
根本不做你想做的事。从页面:

确保上下文的数据库存在如果存在,则为否 已采取行动。如果不存在,则数据库及其所有 模式被创建。如果数据库存在,则不进行任何操作 确保它与此上下文的模型兼容

EnsureCreated()
非常适合在内存中的SQLite数据库上进行集成测试

通常,您希望通过运行
dotnet ef migrations add
为当前模型生成架构,然后如果您希望以编程方式确保数据库反映当前架构,请调用
database.Migrate()
。当然,您也可以从cli调用
dotnet ef database update

也就是说,如果您使用的是某种一次性数据库,并且您根本不想为生成模式或迁移而烦恼,那么

database.EnsureDeleted();
数据库。请重新创建();
。。。应该可以正常工作,因为这些
确保了*
方法不依赖迁移

(我只是通过在
DbContext
中添加一个额外的实体来测试它,然后调用
EnsureDeleted()
,然后调用
EnsureCreated()
,而无需事先迁移,它确实重新创建了数据库,并为新实体创建了一个表。)


如果您还有其他问题,请随时发表意见,我会解决这些问题。:)

“重新创建”仅检查数据库是否存在。如果要更新架构,则需要创建并应用迁移。