2014-04-01 38 views
5

我正在使用的项目是使用实体框架4.3和数据迁移来保持模式最新。在项目过程中,migrations文件夹已经增长,现在有超过600个文件。这是巨大的。由于所有迁移元数据,我们现在有一个超过12MB的二进制文件。什么是折叠所有现有实体框架迁移的最佳方式

我想将所有这些合并到一个迁移中并重新开始。我的顾虑是:

  1. 如果我删除迁移,这是可能的还是会导致迁移历史记录的问题?
  2. 有没有关于如何做到这一点的指导?

回答

5

第一:我建议您将您的迁移保留在单独的程序集中,以免它们与应用程序一起发布。它可能是一个简单的控制台应用程序,它应用迁移或生成脚本的Winforms GUI。但没有理由将其与应用程序一起部署。第二:了解到您将放弃回退到之前版本的能力,您可以从项目中排除所有先前的迁移,然后生成一个新的应用程序,然后应该能够创建数据库反映你目前的模式。这将成为你的新起点。请记住,EF并不总是生成代码,以便在迁移过程中执行您所需的任何操作,因此您可能需要在其他迁移中添加一些手写的迁移代码。

+0

梦幻般的想法将迁移移动到不同的程序集。你知道EF 4这可能吗?我认为迁移必须和DataContext一样生活在同一个项目中。 –

+1

DbMigrationsConfiguration派生类只需要能够看到你的DbContext。有两种方法可以解决这个问题。您可以在Migrations项目中创建单独的上下文,也可以在Migrations项目中添加对数据层的引用,以便可以在其中查看上下文。我采取的方法是将我的实体和实体映射类保存在各自的项目中。在我的Migrations项目中,我有一个没有定义任何DbSets的特殊上下文,它只是使用'modelBuilder.Configuration.AddFromAssembly()' –

+0

动态加载所有实体映射类。我喜欢你提出的分离。这是否仍然允许开发人员使用控制台中的添加迁移和启用迁移? –

0

不确定过去的版本,但如果您在这里寻找EF Core的相同解决方案。您应该只需删除ModelSnapshot并重新运行迁移即可创建干净的工作表。

相关问题