You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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列的表。

创建表的强制要求

  1. 表必须包含一个UNIQUEIDENTIFIER类型列,标记为ROWGUIDCOL,且需设置唯一约束或主键约束——这是FILESTREAM跟踪文件系统数据的必要条件。
  2. 带FILESTREAM属性的列必须是VARBINARY(MAX)类型,并追加FILESTREAM关键字。
  3. 创建表时需通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:41:02