如何在Entity Framework中为JSON添加检查约束?

Pia*_*ong 5 json entity-framework code-first sql-server-2016

JSON CHECK CONSTRAINT为表添加一个表字段

ALTER TABLE [dbo].[Data]  
   ADD CONSTRAINT [JsonData must be formatted as JSON] 
   CHECK  (IsJson([JsonData]) > 0)
Run Code Online (Sandbox Code Playgroud)

工作正常,但我想让它适用于Code First.

我试过了Reverse Engineering Code First,但它对这个问题没有帮助.使用相同的代码执行Sql命令(Seed() method)非常有效,但这不是我想要使用的解决方案之一:

protected override void Seed(MyContext context)
{
    context
    .Database
    .ExecuteSqlCommand(
        "ALTER TABLE [dbo].[Data]  
            ADD CONSTRAINT [JsonData must be formatted as JSON] 
            CHECK  (IsJson([JsonData]) > 0)");
}
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以JSON Check Constraint从Code First 添加?

Mat*_*ear 6

根据接受的答案,您需要添加迁移。这是 EF Core 语法:

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql("ALTER TABLE dbo.Data ADD CONSTRAINT CK_Data_JsonData_MustBeJson CHECK (IsJson(JsonData) = 1);");
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.Sql("ALTER TABLE dbo.Applications DROP CONSTRAINT CK_Data_JsonData_MustBeJson;");
    }
Run Code Online (Sandbox Code Playgroud)


Jov*_*SFT 2

我认为 EF 不支持任何类型的 CHECK 约束。您唯一可以使用的就是迁移。请参阅以下示例:是否可以在 EF7 中使用流畅的 API 添加 CHECK 约束?