使用EF(5)代码优先迁移时,如何执行其他数据库初始化

时间:2012-10-30 14:56:58

标签: c# sql-server ef-code-first entity-framework-5 ef-migrations

我正在将我的ef-code-first应用程序移动到代码优先迁移模型,并将我的数据库初始化程序从DropCreateDatabaseIfModelChanges切换到MigrateDatabaseToLatestVersion

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

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

但是,我收到了各种错误,例如:

  • 我创建用户定义函数的SQL会导致错误,指出CREATE FUNCTION语句必须位于批处理的开头。

  • 我的ALTER DATABASE语句导致错误,说明它无法在用户事务中使用。 (我不创建交易,但可能已经开始了。)

我怎样才能克服这一点?在DbMigration派生类中,我似乎无法访问DbContext,因此无法直接访问数据库。

1 个答案:

答案 0 :(得分:1)

您可以尝试在派生的Seed中覆盖DbMigrationConfiguration方法(这是自定义数据库初始化程序中最接近原始种子方法的替代方法),但要注意每次迁移数据库时都会执行此方法因此,只有在不存在时才必须包括检查以创建函数。