在 EF 迁移期间更改数据库选项
Change database options during EF migration
我们有一些 POCO 类 并为我的数据访问层启用了迁移,我们已经创建了一个初始迁移到 - 请注意,我们使用 CreateDatabaseIfNotExist 数据库初始化。
但在数据库中,我希望有一个使用 SQL 文件流的 MessageBody 字段,因为文件流的 EF 限制 - 我们尝试在迁移脚本中手动完成。
我们执行以下 sql 命令。
Sql("alter table [msg].[Message] add [MessageBody] varbinary(max) FILESTREAM not null");
但我必须设置文件流选项
所以我想在迁移期间/之前执行以下命令。
ALTER DATABASE CURRENT SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL)
但是在创建表时添加此操作时出现错误:多语句事务中不允许使用 ALTER DATABASE 语句。
当您想自动创建数据库时,调整数据库选项的最佳方式是什么?是否可以在进程执行实际迁移之前拦截迁移进程以执行一些 sql?
要修复发生在您身上的错误,您只需调用 Sql 方法并将附加的 bool 参数设置为 true:
Sql("alter table [msg].[Message] add [MessageBody] varbinary(max) FILESTREAM not null", true);
这将导致您的查询将在单独的事务中执行。
我们有一些 POCO 类 并为我的数据访问层启用了迁移,我们已经创建了一个初始迁移到 - 请注意,我们使用 CreateDatabaseIfNotExist 数据库初始化。
但在数据库中,我希望有一个使用 SQL 文件流的 MessageBody 字段,因为文件流的 EF 限制 - 我们尝试在迁移脚本中手动完成。
我们执行以下 sql 命令。
Sql("alter table [msg].[Message] add [MessageBody] varbinary(max) FILESTREAM not null");
但我必须设置文件流选项
所以我想在迁移期间/之前执行以下命令。
ALTER DATABASE CURRENT SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL)
但是在创建表时添加此操作时出现错误:多语句事务中不允许使用 ALTER DATABASE 语句。
当您想自动创建数据库时,调整数据库选项的最佳方式是什么?是否可以在进程执行实际迁移之前拦截迁移进程以执行一些 sql?
要修复发生在您身上的错误,您只需调用 Sql 方法并将附加的 bool 参数设置为 true:
Sql("alter table [msg].[Message] add [MessageBody] varbinary(max) FILESTREAM not null", true);
这将导致您的查询将在单独的事务中执行。