我正在将ef-code-first应用程序移动到代码优先迁移模型,并将数据库初始化程序从DropCreateDatabaseIfModelChanges切换到MigrateDatabaseToLatestVersion。
在最初的初始化器中,我创建了一些用户定义的函数等,并对数据库配置进行了更改(例如,SET AUTO_CLOSE OFF)。所有这些都是通过直接针对DB执行SQL来实现的,因为通过EF不支持SQL。
现在,我已经转移到迁移模型中,我试图通过向生成的Up类的DbMigration方法中添加代码来做很多相同的事情。此代码使用Sql方法注入SQL。
但是,结果是出现了各种错误,例如:
CREATE FUNCTION语句必须在批处理的开头。ALTER DATABASE语句会导致错误,说明它不能在用户事务中使用。(我不创建事务,但可能已经启动了一个事务)。我怎样才能克服这一切?在DbMigration-derived类中,我似乎无法访问DbContext,因此无法直接访问数据库。
发布于 2012-10-31 08:31:29
您可以尝试在派生的Seed中重写DbMigrationConfiguration方法(这是自定义数据库初始化器中原始种子方法最接近的替代方法),但请注意,每次迁移数据库时都会执行此方法,所以您还必须包括创建函数的检查,只有在不存在函数的情况下。
https://stackoverflow.com/questions/13141710
复制相似问题