使用 Fluent migrator 添加计算列

Add computed column with fluent migrator

提问人:advapi 提问时间:4/3/2023 更新时间:10/5/2023 访问量:133

问:

我有一个具有 JSON 内容属性的表。我希望使用计算列提取一个值,我确定它在该字段中。我在过去的json_value里用过它。如何在 Fluent migrator 中定义计算列?

我的迁移定义为


    [Migration(202304031401, "somedesc.")]
    public class AddProductTableMigration:Migration
    {
        public static string TableName = "xxx";
    
        public override void Up()
        {
            Create.Table(TableName).InSchema("dbo")
                .WithColumn("Id").AsInt32().NotNullable().Unique()
                .WithColumn("JsonContent").AsCustom("nvarchar(max)").NotNullable();
        }

        public override void Down()
        {
            if (Schema.Table(TableName).Exists())
            {
                Delete.Table(TableName);
            }
        }
    }
fluent-migrator

评论


答:

0赞 Caltor 10/5/2023 #1

您可以使用如下所示的方法创建计算列:AsCustom(...)

Create.Column("DevelopmentType").OnTable("Software").AsCustom(@"
 AS (
  CASE
   WHEN IsJS = 1 THEN 'JavaScript'
   WHEN IsPython = 1 THEN 'Python'
   ELSE 'Unknown'
  END
 )
 PERSISTED
");

或者你可以像这样使用方法:Execute.Sql(...)

Execute.Sql(@"
ALTER TABLE Software ADD DevelopmentType
 AS (
  CASE
   WHEN IsJS = 1 THEN 'JavaScript'
   WHEN IsPython = 1 THEN 'Python'
   ELSE 'Unknown'
  END
 )
 PERSISTED
");

https://groups.google.com/g/fluentmigrator-google-group/c/Jtbdjd35tlg/