Entity framework core 是否可以在EF7中使用fluent API添加检查约束?

Entity framework core 是否可以在EF7中使用fluent API添加检查约束?,entity-framework-core,Entity Framework Core,是否可以在实体框架7中使用fluent API添加检查约束 我需要做这样的事情: ... ADD CONSTRAINT CK_SomeTable_SomeColumn CHECK (SomeColumn >= X); 如果解决方案是特定于提供商的,这是可以的-我只针对MsSqlServer(至少现在是这样)。从EF 7.0.0-rc1开始,使用fluent API是不可能的 可以在移植中手动定义约束 migrationBuilder.Sql("ALTER TABLE SomeTable

是否可以在实体框架7中使用fluent API添加检查约束

我需要做这样的事情:

...
ADD CONSTRAINT CK_SomeTable_SomeColumn CHECK (SomeColumn >= X);

如果解决方案是特定于提供商的,这是可以的-我只针对MsSqlServer(至少现在是这样)。

从EF 7.0.0-rc1开始,使用fluent API是不可能的

可以在移植中手动定义约束

migrationBuilder.Sql("ALTER TABLE SomeTable ADD CONSTRAINT CK_SomeTable_SomeColumn CHECK (SomeColumn >= X);");

Lukas-Kabrt
在2019年仍然有效,因此我必须创建一个特殊的迁移,我将包括约束及其删除:

        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.Sql(@"
alter table AdminObjectReview add CONSTRAINT CK_AdminObjectReview_OnlyOneType CHECK 
( 
      (CASE WHEN AnswerId IS NULL THEN 0 ELSE 1 END)
    + (CASE WHEN QuestionId IS NULL THEN 0 ELSE 1 END)
    + (CASE WHEN CommentId IS NULL THEN 0 ELSE 1 END)
    + (CASE WHEN UserId IS NULL THEN 0 ELSE 1 END)
    + (CASE WHEN TagId IS NULL THEN 0 ELSE 1 END)
     = 1 )
");
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.Sql("alter table AdminObjectReview  drop CONSTRAINT CK_AdminObjectReview_OnlyOneType");
        }

从EF Core 3.0开始,您可以使用

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeTable>(entity =>
        entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X");
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity(Entity=>
entity.HasCheckConstraint(“CK_SomeTable_SomeColumn”,“[SomeColumn]>=X”);
}

这不是检查约束,但我使用了以下命令来强制执行受祝福的值:
public sealed class ProfileStatus{public string Name{get;}public static readonly ProfileStatus public=new ProfileStatus(“public”);public static readonly ProfileStatus Private=new ProfileStatus(“Private”);public static readonly ProfileStatus VerifiedOnly=new ProfileStatus(“VerifiedOnly”);private ProfileStatus(字符串名){name=name;}
我无法正确获取格式,抱歉……我不明白这会如何添加任何超出公认答案已经解释的内容。你能说得更清楚吗?确实如此。通过建议扩展公认答案,可以/应该在migrations Down方法中删除约束。+1,因为-1在案例中不公平nyone想知道您需要安装
Microsoft.EntityFrameworkCore.Relational
NuGet软件包才能使用此扩展方法。我安装了该软件包,但无法使用
路径找到正确的
…使用Microsoft.EntityFrameworkCore;