如何用FluentMigrator C#创建含FILESTREAM属性的VARBINARY(MAX)列表格?
使用FluentMigrator创建带FILESTREAM属性的VARBINARY(MAX)列的表
实现方案
FluentMigrator没有内置的FILESTREAM配置API,可通过以下两种方式实现:
方式一:直接执行自定义SQL
这种方式直接使用原生T-SQL语句,适配FILESTREAM的创建要求:
[Migration(20240520120000)] public class CreateFileStreamTable : Migration { public override void Up() { Execute.Sql(@" CREATE TABLE DocumentStore ( DocumentID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE, DocumentName VARCHAR(255) NOT NULL, Document VARBINARY(MAX) FILESTREAM NULL ) ON PRIMARY FILEGROUP FILESTREAM_ON FileStreamGroup; "); } public override void Down() { Delete.Table("DocumentStore"); } }
方式二:扩展FluentMigrator语法(更贴合Fluent风格)
先创建扩展方法封装FILESTREAM属性:
public static class FluentMigratorFileStreamExtensions { public static IColumnOptionSyntax AsFileStream(this IColumnTypeSyntax column) { return column.WithAdditionalSql("FILESTREAM"); } }
再在迁移类中调用扩展方法:
[Migration(20240520120000)] public class CreateFileStreamTable : Migration { public override void Up() { Create.Table("DocumentStore") .WithColumn("DocumentID").AsGuid().RowGuidColumn().NotNullable().Unique() .WithColumn("DocumentName").AsString(255).NotNullable() .WithColumn("Document").AsBinary(int.MaxValue).AsFileStream().Nullable() .OnPrimaryFileGroup() .FileStreamOn("FileStreamGroup"); // 需提前创建对应FILESTREAM文件组 } public override void Down() { Delete.Table("DocumentStore"); } }
参考文档翻译(创建存储FILESTREAM数据的表)
适用范围:SQL Server(所有支持版本)
核心说明
FILESTREAM允许SQL Server将文档、图像这类大二进制数据存储在文件系统中,同时保留数据库的事务性访问能力。使用前需先在实例和数据库级别启用该功能,再创建带
VARBINARY(MAX) FILESTREAM列的表。创建表的强制要求
- 表必须包含一个
UNIQUEIDENTIFIER类型列,标记为ROWGUIDCOL,且需设置唯一约束或主键约束——这是FILESTREAM跟踪文件系统数据的必要条件。- 带FILESTREAM属性的列必须是
VARBINARY(MAX)类型,并追加FILESTREAM关键字。- 创建表时需通过
FILESTREAM_ON子句指定已配置的FILESTREAM文件组。T-SQL示例
CREATE TABLE Archive.dbo.Records ( [Id] INT NOT NULL PRIMARY KEY, [SerialNumber] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE, [Chart] VARBINARY(MAX) FILESTREAM NULL ) ON PRIMARY FILESTREAM_ON FileStreamGroup;
内容的提问来源于stack exchange,提问作者Sherif
相关产品推荐
相关产品推荐

