我将我的优先代码应用程序移至代码优先迁移模型,并将数据库初始化程序从DropCreateDatabaseIfModelChanges
切换至MigrateDatabaseToLatestVersion
。如何在使用EF(5)代码优先迁移时执行额外的数据库初始化
在我的原始初始化程序中,我创建了一些用户定义的函数等,并更改了数据库配置(例如SET AUTO_CLOSE OFF
)。所有这些都是通过直接对数据库执行SQL来实现的,因为它不通过EF来支持。
现在我已经转移到了迁移模型,我试图通过将代码添加到生成的DbMigration
类的Up
方法中来做同样的事情。此代码使用Sql
方法注入SQL。
但是,我得到的各种错误的结果,如:
我的SQL创建用户定义的函数导致错误说,
CREATE FUNCTION
声明必须的开始批量。我的
ALTER DATABASE
语句会导致错误,指出它不能在用户事务中使用。 (我不创建一个交易,但可能有一个已经开始)。
我该如何克服这个问题?在DbMigration
派生类中,我似乎无法访问DbContext,因此无法直接访问数据库。
好的,谢谢。如果我有每次迁移需要做的事情,那么我想我必须找出一种方法来确定正在应用哪种迁移,等等。这似乎很像重新实施许多迁移已经做的事情。这是一个耻辱,没有内置的支持。 –