【问题标题】:How do I use Entity Framework in Code First Drop-Create mode?如何在 Code First Drop-Create 模式下使用实体框架?
【发布时间】:2013-02-16 05:59:11
【问题描述】:

我正在使用实体框架 v4。我已按照Nerd Dinner tutorial 中的说明进行操作。我目前处于开发模式(未发布到任何更高的环境),并且希望在每次新部署时重新创建表,因为模型仍然高度不稳定,我不关心保留数据。但是,这不会发生。没有创建/修改表,或者数据库发生任何事情。如果我通过使用包管理器命令迁移到迁移模型:启用迁移、添加迁移(初始),这将起作用并使用我的迁移。但是,由于我还不想进行粒度迁移并且只想要我的初始创建脚本,我不得不每次都删除迁移文件夹,重做命令(启用迁移,添加迁移)并手动删除数据库我改变任何东西。

如何让代码的删除/创建行为首先发生?

【问题讨论】:

    标签: entity-framework code-first


    【解决方案1】:

    如果数据库已经存在并且您想对模型进行更改,请使用DropCreateDatabaseIfModelChanges<YourContextName>

    【讨论】:

      【解决方案2】:

      为您的数据库使用 DropCreateDatabaseAlways 初始化程序。在应用域中第一次使用上下文时,它总是会重新创建数据库:

      Database.SetInitializer(new DropCreateDatabaseAlways<YourContextName>());
      

      其实如果你想为你的数据库做种,然后创建你自己的初始化器,它将继承自DropCreateDatabaseAlways:

      public class MyInitializer : DropCreateDatabaseAlways<YourContextName>
      {
           protected override void Seed(MagnateContext context)
           {
               // seed database here
           }
      }
      

      并在第一次使用上下文之前设置它

      Database.SetInitializer(new MyInitializer());
      

      【讨论】:

      • @RyanLangton @lazyberezovsky 如果您在调用 SetInitializer() 之后直接放置它,则可以立即发生:Database.Initialize(false);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      相关资源
      最近更新 更多