【问题标题】:Updating database schema with Entity Framework Code First使用 Entity Framework Code First 更新数据库模式
【发布时间】:2011-08-05 02:58:08
【问题描述】:

Entity Framework Code First 是开发新项目的绝佳框架。但是扩展现有数据库呢?

例如,如果我只是想向现有数据实体添加附加属性怎么办?是否有任何“代码优先”的方式来执行此操作,或者我是否必须使用 SQL Server Management Studio 或类似工具手动添加数据库列?

到目前为止,我所发现的只是当架构更改时如何从头开始重新生成整个数据库,但我不想丢失我的数据。

如果我没记错的话,Ruby on Rails 有一个工具可以生成反映新数据库更改的 SQL 脚本。在 EF Code First 中也有什么方法可以做到这一点吗?

【问题讨论】:

  • 如果您有任何不想丢失的大量数据......我会说使用模式优先模型。这不是一个选择吗?除了 dba 不可用之外..首先使用代码你会得到什么好处?请赐教……
  • @sam yi:写这篇文章两年后,我倾向于同意你的评论——尽管从开发人员的角度来看,代码优先的方法仍然很有吸引力。简单地向一个类添加一个属性比使用 SQL 命令然后生成更新我的 EF 类要容易得多。

标签: entity-framework ef-code-first database-schema entity-framework-4.1


【解决方案1】:

我目前正在使用 EntityFramework.Migrations 库来解决数据库架构的演变问题。它可以创建生成 SQL 脚本以更新架构的迁移类。

目前它仍处于测试阶段,但我发现它很有用。不幸的是,您仍然应该生成数据迁移脚本。

您可以找到更多信息here

【讨论】:

    【解决方案2】:

    不幸的是,没有。目前没有办法在 EF 代码优先中以增量方式构建数据库。 ADO.NET team described some approach 他们正在开发,但这些工具尚未发布。唯一的方法是使用数据库或模型优先的方法。这意味着您可以直接对数据库中的更改进行建模并继续进行编码,或者您可以使用 EDMX 模型和Database Generation Power Pack 以增量方式构建您的数据库。您仍然可以通过 EF 4.1 中添加的新 T4 模板从 EDMX 生成 DbContext,但您将无法定义实体类(它们将由模板创建)。

    【讨论】:

      【解决方案3】:

      我目前正在解决类似的问题。

      我使用 EF 模型优先方法。我使用一个数据库项目,它由 sql EF 生成。

      基本上我有一个正常的数据库项目,但是表sql是EF模型生成的sql。

      仅供参考,数据库项目能够在现有数据库上生成更改脚本,而不会丢失所有数据。如果正在执行的更改对数据有害并且在这种情况下不运行,您可以设置一个 db 项目来警告您。

      我的解决方案还没有完成(更改 ef 用于生成 sql 的 SsdlToSql10.tt。使其对数据库项目更友好!)。

      【讨论】:

      • 感谢您的建议。当我需要部署新版本时,我正在使用 Visual Studio 数据库架构比较工具生成架构迁移。它工作正常,但欢迎使用更自动化的解决方案。如果我有时间,我会看看数据库项目,这听起来很有趣。
      【解决方案4】:

      Visual Studio 有一个工具 Schema Comparison。修改代码后可以生成数据库,然后使用 Schema Compare 增量修改您的数据库项目或其他数据库

      【讨论】:

      • 感谢您的建议。这正是我现在正在做的事情。它有效,但我正在寻找与 EF 更紧密集成的东西。 EF.Migrations 实际上正是我想要的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2017-10-04
      • 2014-03-07
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多