Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
C# 模型更改后更新数据库-实体框架7_C#_Asp.net Mvc_Entity Framework_Asp.net Core Mvc_Entity Framework Core - Fatal编程技术网

C# 模型更改后更新数据库-实体框架7

C# 模型更改后更新数据库-实体框架7,c#,asp.net-mvc,entity-framework,asp.net-core-mvc,entity-framework-core,C#,Asp.net Mvc,Entity Framework,Asp.net Core Mvc,Entity Framework Core,我使用最新的ASP.NET5 MVC 6 Entity Framework 7创建了一个应用程序,并使用 dnx . ef migration add Initial dnx . ef migration apply 这是可行的,但当我对模型进行更改时,数据库不会更新。我想有数据库自动更新后,模型的变化,当我运行程序 我的研究只指出旧信息似乎不适合EntityFramework7 我当前的代码: public ApplicationDbContext(): base() {

我使用最新的ASP.NET5 MVC 6 Entity Framework 7创建了一个应用程序,并使用

dnx . ef migration add Initial
dnx . ef migration apply
这是可行的,但当我对模型进行更改时,数据库不会更新。我想有数据库自动更新后,模型的变化,当我运行程序

我的研究只指出旧信息似乎不适合EntityFramework7

我当前的代码:

 public ApplicationDbContext(): base()
   {

        if (!_created)
        {

             Database.AsRelational().ApplyMigrations();
             _created = true;         
        }
  }
有人能给我指出正确的方向吗

我相信它通常是这样工作的:

Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>());
Database.SetInitializer(新的DropCreateDatabaseAlways());

您必须从命令行手动运行EF7迁移,或调用数据库。从代码迁移,EF7中没有automagic(经过深思熟虑的决定),在您更改模型之后,创建新迁移

在创建迁移和更新数据库结构的过程之间似乎存在一些混淆

在EF7中,您不能再自动生成迁移(当前数据库结构和实体定义之间的增量)。这必须在命令行中使用“migrations add”命令来完成

然而,更新数据库的结构仍然可以通过代码来完成。这是使用dbContext.Database.Migrate()方法完成的。您可以在启动时将其连接起来,这样当您的应用程序首次启动时,它将确保您的数据库已使用当前版本的应用程序更新

因此,您的开发工作流程可以是:

  • 修改实体定义
  • 运行“migrationsadd”命令
  • 启动你的应用程序*

    • 上面第3条假设您已经在启动时连接了上面提到的Migrate()调用。否则,您还必须手动执行“数据库更新”命令

  • 您必须使用EF7手动运行迁移,或者从代码中调用ApplyMigrations,EF7Hey@ErikEJ中没有任何autpmagic。我正在调用ApplyMigrations(更新了我的问题)。它似乎没有任何作用。。。它到底应该做什么?我找不到任何文件。我不明白为什么它不能是自动的,它过去是自动的。看见请详细说明您的意见好吗?更改模型后,请创建一个新的迁移!通过power shell手动执行?我只是想有一种方法可以自动执行,最坏的情况下我可以执行
    Database.EnsureDeleted();如果(Database.EnsureCreated()){//Database.AsRelational().ApplyMigrations();_created=true;}
    但每次都会删除我的测试数据。谢谢,这对我来说似乎是一个倒退。这种使用可能通过代码实现。现在,每次我更改模型(非常频繁)时,我都必须删除旧的迁移,启动power shell创建新的迁移,转到sql server studio删除数据库,然后返回power shell应用新的数据库模式。而您建议的ApplyMigrations不起作用,您能否从回答中删除它,如果成功的话,我就不需要像上面那样手动操作了。在应用程序启动期间只调用ApplyMigrations一次——那么“不工作”是什么意思?对不起,我应该说ApplyMigrations不是问题的答案。Applymigrations我在启动时运行,但它似乎只构建一次初始数据库。如果我改变了模型。Applymigrations不做任何事情,它不会像我所说的那样将更改应用到数据库中。当您在回答中谈到Applymigrations作为手动运行迁移的替代方案时,它表明ApplyMigrations是一个自动解决方案,但实际上它似乎只起作用一次,并且它不会对模型应用更改,这是我的问题。