我有一个MVC4应用程序,我最近升级到实体框架5,我试图超过我们的移动数据库使用迁移从开发风格的初始迁移和单一的种子删除并创建每个运行。实体框架5迁移:建立数据库
这是我在我的应用程序启动功能中所做的。
protected void Application_Start()
{
Database.SetInitializer(
new MigrateDatabaseToLatestVersion< MyContext, Configuration >());
...
}
我跑我的库项目Enable-Migrations
命令,我认为这将创建一个初始迁移文件,但它创建的唯一文件是Configuration
当我删除它创建它通过预期数据库先编码,然后从配置文件中播种数据库。在配置文件中我改变了所有的Add()
功能AddOrUpdate()
但是它的网站启动,并重复所有的种子数据一次又一次,每次运行种子功能在我Configuration
文件。
我想到的是,当我读博客暗示,它将和我可以把在那里的种子数据将创建一个initial migration
文件,但它并没有
任何人都可以解释我是如何应建立DB在代码中,它只能种一次?
LINK: The migrations blog post I followed
虽然这是使用EF migrate.exe因为我已经转向使用roundhouse运行迁移挺有意思的。我仍然使用EF来支持基于模型的迁移,但是我编写了一个控制台应用程序来将迁移写入SQL文件。然后我使用roundhouse通过我的rake构建脚本执行迁移。还有一点过程涉及到,但它比使用EF在应用程序启动时即时执行迁移时更稳定。
我猜它每次都在运行,因为那是他们唯一可以做到的,而实际上并不需要在实际迁移中实施种子的方法。如果你的种子代码位于迁移的Up()内部,它只会运行一次,这对我来说更直观,因为通常你做了一些数据库更改,并希望将一些数据种入模式的新部分 – FRoZeN
如果您没有任何迁移,您的种子方法永远不会使用此方法运行。我现在也更喜欢在迁移中进行播种 - 这种方式我知道它只会运行一次。 – oldwizard
嗨pcguru。实际上,您始终进行迁移,因为初始数据库被认为是迁移,即从无数据库迁移到拥有数据库。但是我可以看到在移民中拥有种子的好处。 –