1

我正在将我的 ef-code-first 应用程序移动到 code-first-migrations 模型,并将我的数据库初始化程序DropCreateDatabaseIfModelChangesMigrateDatabaseToLatestVersion.

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

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

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

  • 创建用户定义函数的我的 SQL 导致错误说CREATE FUNCTION语句必须在批处理的开头。

  • 我的ALTER DATABASE声明导致一个错误,指出它不能在用户事务中使用。(我没有创建交易,但大概已经开始了)。

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

4

1 回答 1

1

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

于 2012-10-31T08:31:29.650 回答