EF核心:是否可以具有动态defaultValue?例如。取决于另一个值?

时间:2019-07-15 17:37:45

标签: entity-framework entity-framework-core

例如,我的模型中有两个简单的字符串属性:

                    column          cumulative
index1    index2 
0         0             10                  []
          1             11                [10]
          2             12            [10, 11]
          3             13        [10, 11, 12]
          4             14    [10, 11, 12, 13]
1         0             20                  []
          1             21                [20]
          2             22            [20, 21]
          3             23        [20, 21, 22]
          4             24    [20, 21, 22, 23]

在我的OnModelCreating内部:

cumulative

有可能这样吗?还是默认值只能是常量? 正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

否,不可能。以下是经过测试的配置;

modelBuilder
.Entity<Model>()
.Property(f => f.MyValue)
.HasDefaultValueSQL("CONCAT(SUBSTRING(BaseString, 0, 1), \'something else\')");

并产生以下迁移;

  migrationBuilder.CreateTable(
                name: "Test",
                columns: table => new
                {
                    Id = table.Column<int>(nullable: false)
                        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                    BaseString = table.Column<string>(nullable: true),
                    MyValue = table.Column<string>(nullable: true, defaultValueSql: "CONCAT(SUBSTRING(BaseString, 0, 1), 'something else')")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_Test", x => x.Id);
                });

但是,当尝试应用迁移时,生成了以下错误。错误是有关支持配置的描述。

  

在此上下文中,不允许使用名称“ BaseString”。有效   表达式是常量,常量表达式和(在某些情况下   上下文)变量。列名称是不允许的。