2013-06-20 227 views
1

最初代码首先意味着您创建一个包含代码的模型,然后它为您生成一个数据库。被代码优先迁移困惑

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

这是正确的吗?

回答

1

实际上没有正确的 - 但有责任,可能是混乱的一些重叠。

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

迁移是为了解决这个问题而引入的 - 基本上可以帮助您实现典型的开发生命周期,您的代码和模型将通过不同的版本(以及分期,生产考虑)发展。

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

但是,它并没有改变代码的性质 - 所有的变化都会自动检测到并为您编写脚本(这是整个点) - 也自动应用(从代码中,w/o PS)如果您使用MigrateDatabaseToLatestVersion Db初始值设定项。

所有你需要做的是什么是正常预期的你作为一个开发商 - 到那种把“检查点”在你的代码模型 - 和创建迁移 - 当你真正觉得时间是正确的那。 你可以通过PS控制台来做到这一点。

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

这里是我的一篇文章,我为迁移做了一种hands on演练 - 可能出现的问题,以及所有我能想到的地方。

Code first create tables

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

1

我将尝试“非混淆”你:)

有两个独立的部分组成:的EntityFramework和迁移。

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

迁移是可选的,但是可以避免直接的SQL交互。

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