使用Fluent API首先使用代码创建数据库。迁移已启用,init文件位于迁移文件夹中。现在我们需要删除数据库并用新的定义(映射,所需实体等)重新创建它。我是否需要删除迁移文件夹或一些迁移文件以再次创建数据库?我不确定迁移的init文件是否对Fluent API的OnModelCreating方法有任何影响。我厌倦了在StackOverflow上找到答案,并且还在Entity Framework Tutorial 之上,但我仍然不确定。有人可以解释我将如何使用我的场景创建数据库吗?实体框架6重新创建数据库
回答
关键在Initializer类中。在我的情况:
这里我类扩展CreateDatabaseIfNotExists
,但你会想,如果我理解正确的话,DropCreateDatabaseIfModelChanges
。因此,它应该是这样的:
public class PricedNotesInitializer:DropCreateDatabaseIfModelChanges<PricedNotesContext>
{
protected override void Seed(PricedNotesContext context)
{
}
}
当你做
Add-Migration NewMigrationName
然后EF会自动生成的代码作为迁移文件夹迁移之后会发生什么。
要应用的迁移,只需键入
Update-Database
完成!您在OnModelCreating
中所做的任何更改都将反映在迁移中(如更改密钥,精度等)。此外,由于我们指定了DropCreateDatabaseIfModelChanges
,所以使用该Seed方法编写的任何内容都将被执行并且您的数据库将被重新创建。
希望这会有所帮助。
我的观点是创建数据库就像当前不存在的数据库一样,因此创建一个新的连接字符串 - 为同一个项目创建2个数据库(当然只使用一个),我们只想尝试哪个更适合应用程序。这就是为什么我不知道我是否应该删除迁移文件的原因。所以也许更好的问题是当我想创建新的数据库时,我是否需要删除迁移? – Mony
没有。如果您只是将连接字符串更改为指向新数据库,则可以运行“更新数据库”,并且将应用所有这些迁移。它将具有与当前数据库完全相同的架构。那有意义吗?你不需要删除任何东西。 – coolboyjules
感谢您的解释,但是我在你写评论之前做了修改,并删除了usman链接中建议的所有迁移文件,DB不一样,因为模型的改变,也归功于你的文章,我搜索了一点点,最终发现了意思'init'和'''migrations'和''OnModelCreating'方法的配置文件方法 – Mony
- 1. 实体框架6 - 更新数据库
- 2. 重新创建实体框架表,而不是数据库?
- 3. 实体框架6不创建数据库
- 4. 未创建实体框架数据库
- 5. 实体框架不创建数据库
- 6. 实体框架不创建数据库
- 7. 实体框架6更新数据库无法使用-IgnoreChanges创建的迁移
- 8. 实体框架重新创建POCO类
- 9. 如何在实体框架数据库创建后重命名实体框架数据库?
- 10. 实体框架创建重复实体
- 11. 如何使用实体框架删除并重新创建数据库?
- 12. 实体框架,数据库
- 13. ADO.NET实体框架 - 轻松重新创建实体类?
- 14. 实体框架6:创建具有多个上下文的数据库
- 15. 实体框架6:数据操作
- 16. WinForms数据绑定实体框架6
- 17. 实体框架6和空间数据
- 18. 实体框架6
- 19. 实体框架创建最新的IQueryable
- 20. 实体框架创建新表
- 21. 实体框架重新添加现有数据库对象
- 22. 实体框架(数据库优先) - 重新生成代码
- 23. 实体框架增加了重复实体数据库
- 24. 实体框架不保存/停止重建数据库
- 25. 实体框架插入多对多创建重复数据
- 26. 实体框架与长列名创建数据库
- 27. 实体框架不会在App_Data中创建数据库
- 28. 由实体框架自动创建的数据库的位置
- 29. 实体框架未创建数据库或表
- 30. 使用实体框架在数据库中创建表
我想在这里你可以找到你的答案[Here](http://stackoverflow.com/a/16082497/4154016) –
我用这个教程一年或两年后,真的很喜欢它,除了无论出于什么原因,我认为自定义初始化程序的配置文件设置将不起作用。无论如何,初始化器的部分在这里:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx。我的问题在这里:http://stackoverflow.com/questions/32384662/set-databaseinitializerfortype-in-config-file-for-custom-initializer-to-fire。基本上我想定义一个不同于产品环境的'开发'环境的再种植。 – djangojazz
如果您正在使用迁移并希望执行自定义播种方法,我也经历了这种痛苦。问题在于模型改变了“数据丢失”的概念。你不应该删除你的迁移,因为他们都会留下,除非你想'空白石板'的一切,并重新开始。您首先应该问自己的问题是:“我是否首先启用迁移以查看模式历史记录?”如果答案是否定的,甚至不要沿着这条路线走。 http://stackoverflow.com/questions/33446327/seeding-data-will-not-work-when-schema-changes-with-code-first-when-using-migrat – djangojazz