我正在将我的ef-code-first应用程序移动到代码优先迁移模型,并将我的数据库初始化程序从DropCreateDatabaseIfModelChanges
切换到MigrateDatabaseToLatestVersion
。
在我的原始初始化程序中,我创建了一些用户定义的函数等,并对数据库配置进行了更改(例如SET AUTO_CLOSE OFF
)。所有这些都是通过直接对数据库执行SQL来实现的,因为它不是通过EF支持的。
现在我已经转移到迁移模型,我试图通过向生成的Up
类的DbMigration
方法添加代码来做同样的事情。此代码使用Sql
方法注入SQL。
但是,我收到了各种错误,例如:
我创建用户定义函数的SQL会导致错误,指出CREATE FUNCTION
语句必须位于批处理的开头。
我的ALTER DATABASE
语句导致错误,说明它无法在用户事务中使用。 (我不创建交易,但可能已经开始了。)
我怎样才能克服这一点?在DbMigration
派生类中,我似乎无法访问DbContext,因此无法直接访问数据库。
答案 0 :(得分:1)
您可以尝试在派生的Seed
中覆盖DbMigrationConfiguration
方法(这是自定义数据库初始化程序中最接近原始种子方法的替代方法),但要注意每次迁移数据库时都会执行此方法因此,只有在不存在时才必须包括检查以创建函数。