Code First Migrations感到困惑

时间:2013-06-20 12:25:46

标签: ef-code-first ef-migrations

最初Code First意味着您使用代码创建模型,然后为您生成数据库。

使用迁移,现在看起来我添加/更改模型,然后我必须使用新API手动描述更改。

这是对的吗?

2 个答案:

答案 0 :(得分:1)

我会试着“混淆”你:)

有两个独立的组件:EntityFramework和Migrations。

在Entity Framework中,您将为您生成模型和数据库。但是,如果您对模型进行了更改,则需要手动更新数据库,否则EntityFramework会向您抛出错误。这就是Code First Migration的用武之地。它可以手动或自动管理数据库升级。

迁移是可选的,但是一个很好的包,可以避免直接的SQL交互。

请参阅http://msdn.microsoft.com/en-us/data/jj591621.aspx

答案 1 :(得分:1)

实际上并不正确 - 但是责任的某些重叠可能令人困惑。

有点简化 - 最初的EF,代码首先没有考虑增量代码/模型更改

引入了迁移来解决这个问题 - 并且基本上有助于典型的开发生命周期,您的代码和模型将通过不同的版本(以及分期,生产时)进行演变。

迁移将__MigrationHistory表添加到您的Db中 - 迁移是数据库,代码模型和该表(保存和跟踪历史记录)之间的“树方式”同步过程。

但是,它不会改变代码优先的性质 - 并且所有都会自动检测并编写脚本(这是整点) - 并且还会自动应用(来自如果你使用MigrateDatabaseToLatestVersion Db初始化程序,代码,没有PS)。

您需要做的只是作为开发人员通常对您的期望 - 为您的代码模型设置“检查点” - 并且创建迁移 - 当你真正觉得时间适合的时候。 您通过PS控制台执行此操作。

然后,您可以在开发计算机或任何其他部署的控制台上应用该迁移 - 或者从代码中自动执行迁移。

这是我的一篇文章,我在那里进行了一次hands on迁移 - 可能的问题,所有这些都放在一个我能想到的地方。

Code first create tables

或者这个...... MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"