1

我将我的优先代码应用程序移至代码优先迁移模型,并将数据库初始化程序从DropCreateDatabaseIfModelChanges切换至MigrateDatabaseToLatestVersion如何在使用EF(5)代码优先迁移时执行额外的数据库初始化

在我的原始初始化程序中,我创建了一些用户定义的函数等,并更改了数据库配置(例如SET AUTO_CLOSE OFF)。所有这些都是通过直接对数据库执行SQL来实现的,因为它不通过EF来支持。

现在我已经转移到了迁移模型,我试图通过将代码添加到生成的DbMigration类的Up方法中来做同样的事情。此代码使用Sql方法注入SQL。

但是,我得到的各种错误的结果,如:

  • 我的SQL创建用户定义的函数导致错误说,CREATE FUNCTION声明必须的开始批量。

  • 我的ALTER DATABASE语句会导致错误,指出它不能在用户事务中使用。 (我不创建一个交易,但可能有一个已经开始)。

我该如何克服这个问题?在DbMigration派生类中,我似乎无法访问DbContext,因此无法直接访问数据库。

回答

1

你可以尝试重写Seed方法在派生DbMigrationConfiguration(即在自定义数据库初始化原原种方法最接近的替代品),但要注意的是这种方法,每次执行数据库迁移的时间,让你还必须包括检查只有在不存在的情况下才能创建函数。

+0

好的,谢谢。如果我有每次迁移需要做的事情,那么我想我必须找出一种方法来确定正在应用哪种迁移,等等。这似乎很像重新实施许多迁移已经做的事情。这是一个耻辱,没有内置的支持。 –

相关问题