1

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

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

这个对吗?

4

2 回答 2

1

我会尽量让你“解惑”:)

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

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

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

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

于 2013-06-20T14:54:06.233 回答
1

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

有点简化 - 最初是 EF,代码优先不是在考虑增量代码/模型更改的情况下进行的。

引入迁移来解决这个问题 - 并且基本上有助于典型的开发生命周期,您的代码和模型通过不同的版本发展(并考虑到分期,生产)。

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

但是,它不会改变代码优先的性质 - 并且所有更改都会自动检测并为您编写脚本(这是重点) - 如果您也自动应用(从代码中,没有 PS)使用MigrateDatabaseToLatestVersionDb 初始化程序。

作为开发人员,您需要做的就是通常对您的期望——在代码模型上放置一个“检查点”——并创建迁移——当你真正觉得时机成熟时。您可以通过 PS 控制台执行此操作

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

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

代码先创建表

或者这个......
MVC3 和 Code First 迁移 - “自从创建数据库以来,支持'blah'上下文的模型已经改变”

于 2013-06-20T18:34:02.917 回答