0

使用Fluent API首先使用代码创建数据库。迁移已启用,init文件位于迁移文件夹中。现在我们需要删除数据库并用新的定义(映射,所需实体等)重新创建它。我是否需要删除迁移文件夹或一些迁移文件以再次创建数据库?我不确定迁移的init文件是否对Fluent API的OnModelCreating方法有任何影响。我厌倦了在StackOverflow上找到答案,并且还在Entity Framework Tutorial 之上,但我仍然不确定。有人可以解释我将如何使用我的场景创建数据库吗?实体框架6重新创建数据库

+0

我想在这里你可以找到你的答案[Here](http://stackoverflow.com/a/16082497/4154016) –

+0

我用这个教程一年或两年后,真的很喜欢它,除了无论出于什么原因,我认为自定义初始化程序的配置文件设置将不起作用。无论如何,初始化器的部分在这里: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

+0

如果您正在使用迁移并希望执行自定义播种方法,我也经历了这种痛苦。问题在于模型改变了“数据丢失”的概念。你不应该删除你的迁移,因为他们都会留下,除非你想'空白石板'的一切,并重新开始。您首先应该问自己的问题是:“我是否首先启用迁移以查看模式历史记录?”如果答案是否定的,甚至不要沿着这条路线走。 http://stackoverflow.com/questions/33446327/seeding-data-will-not-work-when-schema-changes-with-code-first-when-using-migrat – djangojazz

回答

1

关键在Initializer类中。在我的情况:

​​

这里我类扩展CreateDatabaseIfNotExists,但你会想,如果我理解正确的话,DropCreateDatabaseIfModelChanges。因此,它应该是这样的:

public class PricedNotesInitializer:DropCreateDatabaseIfModelChanges<PricedNotesContext> 
{ 

    protected override void Seed(PricedNotesContext context) 
    { 

    } 
} 

当你做

Add-Migration NewMigrationName 

然后EF会自动生成的代码作为迁移文件夹迁移之后会发生什么。

要应用的迁移,只需键入

Update-Database 

完成!您在OnModelCreating中所做的任何更改都将反映在迁移中(如更改密钥,精度等)。此外,由于我们指定了DropCreateDatabaseIfModelChanges,所以使用该Seed方法编写的任何内容都将被执行并且您的数据库将被重新创建。

希望这会有所帮助。

+0

我的观点是创建数据库就像当前不存在的数据库一样,因此创建一个新的连接字符串 - 为同一个项目创建2个数据库(当然只使用一个),我们只想尝试哪个更适合应用程序。这就是为什么我不知道我是否应该删除迁移文件的原因。所以也许更好的问题是当我想创建新的数据库时,我是否需要删除迁移? – Mony

+0

没有。如果您只是将连接字符串更改为指向新数据库,则可以运行“更新数据库”,并且将应用所有这些迁移。它将具有与当前数据库完全相同的架构。那有意义吗?你不需要删除任何东西。 – coolboyjules

+0

感谢您的解释,但是我在你写评论之前做了修改,并删除了usman链接中建议的所有迁移文件,DB不一样,因为模型的改变,也归功于你的文章,我搜索了一点点,最终发现了意思'init'和'''migrations'和''OnModelCreating'方法的配置文件方法 – Mony