首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将EF-迁移引入到现有的成熟项目中

问如何将EF-迁移引入到现有的成熟项目中
EN

Stack Overflow用户
提问于 2019-10-25 10:40:18
回答 1查看 106关注 0票数 0

简而言之,我想要做的是将迁移的功能添加到一个成熟的项目中,并且总是使用sql手动处理更改。

我已经被分配了一个使用实体框架的项目,但是所有的数据库更改都是手动完成的,而没有使用迁移。

在前面引入新更改时,我们将在代码中创建模型,用新表更新上下文,然后使用实体框架PowerTools生成sql,然后手动更新数据库。

因此,今天我们有了一个完整的数据库、一个数据库文本以及精心构建的EntityTypeConfiguration类。所以这是代码优先的情况,但是数据库已经存在了。

挑战是在我跑完之后

代码语言:javascript
复制
'Enable-Migrations'
'Add-Migration'

我被一个完整的Up()函数卡住了,这个函数试图创建整个数据库,如果我这样做的话

代码语言:javascript
复制
'Update-Database'.

我想要做的是在数据库中设置一个标志,即当前状态就是现状,并且我的当前Up()函数只用于创建一个全新的数据库。

在此之后,我希望通过EF-迁移来处理对数据库的所有更改。

这个是可能的吗?怎么做呢?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-25 10:46:24

选项1:创建从当前模型开始的迁移

您可以使用–IgnoreChanges参数和Add-Migration命令:

代码语言:javascript
复制
Add-Migration MigrationName –IgnoreChanges

这将创建一个以当前模型为快照的空迁移。

选项2:创建从零开始创建数据库的完整迁移,但跳过某些数据库的第一次迁移()

实体框架使用__MigrationHistory表来跟踪已经执行的迁移。当第一次迁移在数据库上执行时,它将被插入到__MigrationHistory表中。下次调用Update-Database命令时,EF将查看__MigrationHistory表,并跳过已经应用于数据库的迁移。

要使特定数据库跳过第一次迁移,可以执行以下操作:

  1. 创建初始迁移:

代码语言:javascript
复制
Enable-Migrations
Add-Migration InitialCreate 

  1. 使用以下命令获取迁移脚本:

代码语言:javascript
复制
Update-Database -Script

  1. 删除上述脚本中的所有内容,但以下语句除外:

代码语言:javascript
复制
CREATE TABLE [__MigrationHistory]
代码语言:javascript
复制
INSERT INTO [__MigrationHistory] ...

并在数据库上执行这些语句。

现在,这个数据库拥有已经应用了InitialCreate迁移的信息,对这个特定数据库的任何对Update-Database的进一步调用都将跳过InitialCreate迁移。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58556976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档