2016-08-12 72 views
0

我创建了一个大的迁移,创建我的初始模式并运行数据库更新。EF迁移中的错误更好地回滚,删除,重新添加或只是简单地添加新的

之后我发现应该是DateTime类型的字段意外地是字符串类型。我将它固定在我的模型中。

现在,我应该将数据库更新为发生错误之前的迁移,请删除错误的迁移,然后重新添加迁移。或者只是简单地添加一个只修补修补程序的新迁移。

我倾向于回滚,删除,然后重新添加的原因是因为我不想要任何搞砸了不正确的信息我会迁移?我觉得迁移不正确是毫无意义的。

我相信混淆对我来说是因为我从来没有在生产环境中使用迁移,所以我不认为我知道他们的力量。因此,我希望有人澄清旧的迁移是否会出现错误,或者是否应该全部没有错误,并在添加新模型/实体时显示数据库的整个进度。

+1

就我个人而言,我使用migrations来实现一个目的:更新远程UAT和PROD数据库。当我第一次开始开发绿地应用程序时,我将使用DropCreate初始化程序之一,甚至不用担心迁移。当我准备部署时,我切换到迁移。我总是按照克里斯所描述的[这里]滚动我的迁移(http://cpratt.co/migrating-production-database-with-entity-framework-code-first/#at_pco=smlwn-1.0&at_si=54ad5c7b61c48943&at_ab=每12&at_pos = 0&at_tot = 1)。 –

+0

@SteveGreene你使用实体框架DropCreate功能吗?如果是这样,你知道如何实施它在EF核心1.0(EF7) –

+0

对不起,错过了核心标签。它不同,但可行:使用Database.EnsureDeleted,然后使用Database.EnsureCreated。 https://github.com/aspnet/EntityFramework/issues/3042 –

回答

1

迁移只是帮助您在模式更改之间保留数据的工具。它们特别适合在团队环境中管理多个数据库服务器,如dev/test/production或dev-local数据库。

如果您只有一台服务器,那么重写迁移便宜,所以请继续并以此方式进行更正。

如果您的团队中的每个人都已应用迁移,或者您已将其应用于数据库,并且希望保留其中的数据,那么使用新迁移来更新列会更加简单。

换句话说,使用迁移没有正确或错误的方式,只有与重写历史记录相关的成本。