2

我可能在这里做错了事,如果是这样的话,请指点我正确的方向。在运行时迁移不同的数据库

我编码,我希望能够键入连接字符串我想在运行时使用,并能更新不同的数据库(可能每一个不同的版本)迁移应用程序。

我的问题是添加迁移命令只能通过软件包管理器控制台执行,并且由于我的app.config下没有设置连接字符串,因此如何才能将实体迁移知道我的数据库在哪个版本?

我在针对某个连接字符串(它正确创建了数据库和表)运行Initial迁移后陷入了这个问题,但之后,当我尝试添加第二个迁移文件时,出现错误,说有其他迁移正在进行中。

也许实体转移只是并不意味着出了包管理器控制台来执行,或者动态连接字符串,但我要肯定的我在做什么。

+0

是的,你可以这样做http://stackoverflow.com/a/16133150/1347784 –

回答

2

已经有准备这样的应用程序 - 浏览上migrate.exe信息:http://msdn.microsoft.com/en-us/data/jj618307.aspx

关于您的问题 - ef可以识别哪个迁移数据库非常简单。它用于数据库中的__MigrationHistory表。在那里它具有已经应用迁移的信息(通过MigrationId)。通过存储在您的迁移的resx文件中的哈希值在关键“目标”下比较应用给定迁移后应该是当前数据库和数据库的状态。

+0

关键是我通过包管理器控制台添加迁移文件,并且在我的app.config下没有设置连接字符串。 无法检查表__MigrationHistory,因为执行“添加迁移”命令时应用程序未运行。 我可能只是重新发明轮子。我要检查提供的链接,然后更新答案。 – MMalke

+0

添加迁移和更新数据库脚本始终针对某些数据库执行。 – mr100

+0

应用程序不需要运行,以便脚本可以检查__MigrationHistory表。 – mr100