【问题标题】:How to update structure of database with Entity Framework Code First without losing all data?如何在不丢失所有数据的情况下使用 Entity Framework Code First 更新数据库结构?
【发布时间】:2014-11-17 16:33:12
【问题描述】:

我需要更改数据库的结构(添加更多列并更改现有列之一)(我在我的 WebAPI 项目的“模型”中进行了一些更改)。在 Visual Studio 2013 中是否有一些简单的方法可以做到这一点?

【问题讨论】:

  • 更新架构时所有数据都会丢失吗?
  • 您需要提供更多关于您的问题的详细信息。使用 Code First 的默认行为应该是保留您的表和数据。如果您同时使用自动迁移并进行了一些更改,如果不删除和读取表就无法应用,那么实体框架可能会这样做以进行迁移,但同样,我们需要更多信息明确地告诉你任何事情。
  • 您是否使用了初始化数据类?
  • 我之前更新了SQL数据库,然后更新了实体上下文,没有数据丢失。
  • 在 MVC 4 EF Code First 中,可以通过安装称为数据库迁移的东西来更改数据库结构。输入包控制台enable-migrations 激活(或安装)迁移。然后,当您在代码中更改数据库的结构时,在同一控制台中键入 update-database 会更新数据库的结构,例如在 SQL Server 上。

标签: asp.net asp.net-mvc entity-framework asp.net-web-api visual-studio-2013


【解决方案1】:

您可以使用Entity Framework Migrations 并运行update-database 命令来生成可以手动运行的T-SQL 脚本。这使您可以更好地控制应用于数据库的更改。或者,您可以信任 EF 为您做这件事。你可以在这里找到所有必要的 ef 迁移命令:http://msdn.microsoft.com/en-us/data/jj591621.aspx

编辑 我提供的链接有一个名为获取 SQL 脚本的部分。要为您的迁移执行此操作,只需运行以下命令:

Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: yourmigrationname

您需要将“yourmigrationname”替换为您的迁移名称,当您运行此命令时,您将获得一个仅包含 SQL 脚本的新选项卡。然后您可以选择保存或运行它。

【讨论】:

  • 好的,我已经输入了更新数据库。您所说的这个“T-SQL 脚本”是“迁移”文件夹中出现的“[somenumbers]_Initial1.cs”文件吗?我该如何运行它?
  • 我认为 add-migration "migration_name" 是更新模型后如何生成更改。然后,您执行 update-database -verbose 并将这些更改提交到数据库。
【解决方案2】:

既然您评论了我是如何做到的,我会将其发布为澄清的答案。

我在 MSSQL 服务器中进行了我需要的更改。如果需要,我可以添加列、更改列名,甚至删除列。

然后在我的模型 (.edmx) 中删除我刚刚在 MSSQL Server 中更新的表。一旦我这样做了,然后我右键单击开放空间并单击从数据库中更新模型。 I then select my table, or tables, when the "Add" tab is selected.我发现这效果最好,因为“刷新”似乎从来没有真正适合我。单击完成后,您的模型现在将使用您已更改的表中的最新列进行更新。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多