Sql server EntityFrameworkCore不再创建实体
实体框架核心2.2.0 | Visual Studio 2019 当我第一次运行此代码时,它在我的SQL Server Express数据库中的Sql server EntityFrameworkCore不再创建实体,sql-server,entity-framework-core-2.2,Sql Server,Entity Framework Core 2.2,实体框架核心2.2.0 | Visual Studio 2019 当我第一次运行此代码时,它在我的SQL Server Express数据库中的dboschema下创建了对象: public class MyTable { public int Id { get; set; } public string Name { get; set; } } public class MyContext : DbContext { public DbSet<MyTable&g
dbo
schema下创建了对象:
public class MyTable
{
public int Id { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public DbSet<MyTable> MyTables { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer('connection string to sql server express');
}
}
using (var context = new MyContext ())
{
context.Database.EnsureCreated();
}
公共类MyTable
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
公共类MyContext:DbContext
{
公共DbSet MyTables{get;set;}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
基本配置(选项生成器);
optionsBuilder.UseSqlServer('SQLServerExpress的连接字符串');
}
}
使用(var context=newmycontext())
{
context.Database.recreated();
}
接下来,我转到SSMS并手动删除了MyTable
现在,当我运行相同的代码时,它不会创建MyTable
合乎逻辑的解释是,EFC使用的跟踪表表明MyTable
仍然存在,因此它不会尝试创建它
但我找不到任何这样的跟踪表
解释是什么?EF运行创建表的迁移,以便假定表在那里 如果添加新的迁移,它可能会包含再次创建表的代码。请注意,这将导致创建同一个表的两次迁移,并导致在空数据库上运行时出现问题 如果您不是通过EF删除表,那么您就不再处于代码优先的场景中 最好的选择可能是重新创建数据库这将删除数据
如果无法承受数据丢失,则直接在数据库中重新创建该表(或从备份中恢复,该表仍在备份中)。最后,迁移历史记录表有一个路径,但根据具体细节可能会比较复杂。转到visual 2019中的package manager控制台 (类型)
如果OP调用
dbContext.Database.CreateDatabase()
,会发生什么?这只是一个开发测试数据库,我可以毫无问题地删除它并重新开始。但是我必须使用迁移吗?或者,是否有一种方法可以只对实体类进行更改,EFC将在运行时自动识别并应用于我的数据库?
add-migration migrationname
update-database