C# 使用MVC5更新EF5中的数据库
我正在从事一个使用实体框架5和MVC5的项目。我的项目目前正在运行。 我试图在表中添加一列。但正如我们所知,在EF中,当我们在模型中添加一个字段时,它会删除并重新创建数据库,这是我无法做到的。 其中一种方法是代码迁移。但我的经理不允许我使用它(因为它是一个大型数据库项目)C# 使用MVC5更新EF5中的数据库,c#,asp.net-mvc,model-view-controller,entity-framework-5,asp.net-mvc-5,C#,Asp.net Mvc,Model View Controller,Entity Framework 5,Asp.net Mvc 5,我正在从事一个使用实体框架5和MVC5的项目。我的项目目前正在运行。 我试图在表中添加一列。但正如我们所知,在EF中,当我们在模型中添加一个字段时,它会删除并重新创建数据库,这是我无法做到的。 其中一种方法是代码迁移。但我的经理不允许我使用它(因为它是一个大型数据库项目) 请帮助我并提出一些建议。当我开始在Entity Framework中首先使用代码时,我的情况与您相同。我总是运行updatedatabase-F,然后看着我所有的表被删除和重新创建,即使是像重命名字段这样简单的事情 对数据库进
请帮助我并提出一些建议。当我开始在Entity Framework中首先使用代码时,我的情况与您相同。我总是运行
updatedatabase-F
,然后看着我所有的表被删除和重新创建,即使是像重命名字段这样简单的事情
对数据库进行版本控制很难,但使用命名迁移要容易得多(我认为这正是您提到代码迁移时的意思)。我知道你的老板反对这个想法,但这是非常灵活的
实际上,您在Package Manager控制台中运行Add Migration-Name xxx
,实体框架将使用默认命令为您构建一个配置类(用于版本控制Up()
和Down()
),它将在更新数据库时执行。如果您不喜欢这些命令,可以更改它们。如果需要,您甚至可以四处移动数据(不过这有点麻烦)
我想你有四个选择
- 使用代码优先自动迁移:这是您目前拥有的功能,无法让您充分控制更新数据库时发生的情况。它有利于在项目的早期阶段开始,但在生产后会变得笨拙
- 使用代码优先命名迁移:通过
配置为您提供所需的控制
——但您的上司阻止使用它
- 使用数据库优先方法:数据库优先允许您从现有数据库对模型进行反向工程。因此,如果您需要进行更改,您可以先更改数据库,然后使用EF重新生成模型。这通常是DBA喜欢的,但这可能意味着您已经重新实现了现有项目的某些方面
- 不要使用实体框架:您可能会恢复到SQL查询,您的老板可能会接受这些查询,并为您提供所需的灵活性,但谁需要这种痛苦呢
如果我能提供进一步的帮助,请告诉我。您好,我只是想问一下迁移将遵循什么流程。比如,它创建现有数据库的备份,并在数据库结构中更新后再次恢复它?或者它只是更新_migrationtable还是什么?您是否在寻求目前在生产中更新数据库的最佳方法?