Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server EntityFrameworkCore不再创建实体_Sql Server_Entity Framework Core 2.2 - Fatal编程技术网

Sql server EntityFrameworkCore不再创建实体

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

实体框架核心2.2.0 | Visual Studio 2019

当我第一次运行此代码时,它在我的SQL Server Express数据库中的
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