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()
,而无需事先迁移,它确实重新创建了数据库,并为新实体创建了一个表。)
如果您还有其他问题,请随时发表意见,我会解决这些问题。:) “重新创建”仅检查数据库是否存在。如果要更新架构,则需要创建并应用迁移。