【问题标题】:Entity framework model first approach removes all table data实体框架模型优先方法删除所有表数据
【发布时间】:2011-12-26 17:51:03
【问题描述】:

我正在研究实体框架中的模型优先方法。我发现每当从模型中重新生成数据库时,所有数据都会被清除。模型优先真的是一种有用的方法还是有办法解决这个问题

【问题讨论】:

    标签: asp.net .net entity-framework-4 ef-model-first


    【解决方案1】:

    解决此问题的一种方法是为您的数据播种,即在 EF 创建数据库后使用一些测试数据填充数据库。见http://binuity.com/blog/2011/03/28/ef4-seeding-data-on-each-dropcreatedatabaseifmodelchanges/

    另一种方法是让tools 尝试更新数据库而不是重新创建它。

    【讨论】:

    • 仅适用于 Code First
    • @cdm9002,是的,播种的示例代码仅适用于 Code First,但也可以在 Model First 中播种您的数据。您所要做的就是编写将种子数据插入数据库的代码(例如msdn.microsoft.com/en-us/library/ff407091.aspx)。但是,这里的 OP 可能对保留他的数据更感兴趣,而这只能使用一些工具!
    【解决方案2】:

    Entity Framework 删除您的数据库并从头开始重新创建它。这就是它的工作方式。 Microsoft 正在制定允许您迁移更改的迁移策略,但要到下一个主要版本才能准备好。

    有一些第三方工具试图解决这个问题,但我不会太依赖它们。

    【讨论】:

      【解决方案3】:

      Model first 不会自动删除您的数据。它会创建用于创建数据库的 SQL 脚本,如果您执行它,它可能会删除所有表,但您可以手动更改脚本,也可以使用一些高级工具进行数据库升级:

      【讨论】:

        【解决方案4】:

        每当您更新模型并运行自动生成的 SQL 脚本时,您都可以手动为数据库播种以取回您的数据。播种在 Model-First 中的工作方式与在 Code-First 中的工作方式不同,因此经常谈论且有用的 DropAndCreateDatabaseIfModelChanges 方法效果不佳。最简单的解决方法是通过初始化自己手动播种。

        var db = new MyDbContext();
        db.Database.Initialize(true);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          • 2020-06-22
          • 2015-07-27
          • 1970-01-01
          • 1970-01-01
          • 2016-08-25
          相关资源
          最近更新 更多