是否可以在EF7中使用流畅的API添加CHECK约束?

时间:2015-12-12 21:55:20

标签: entity-framework-core

是否可以在Entity Framework 7中使用流畅的API添加CHECK约束?

我需要做到这样的事情:

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

如果解决方案是提供者特定的,那就没问题 - 我只针对MsSqlServer(至少现在)。

3 个答案:

答案 0 :(得分:14)

从EF 7.0.0-rc1开始,使用流畅的API无法实现。

您可以在迁移中手动定义约束

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/card"
    app:cardCornerRadius="4dp"
    app:cardElevation="5dp"
    app:cardUseCompatPadding="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

       <!-- Other object -->

    </LinearLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:clickable="true"
        android:src="@android:drawable/ic_dialog_info"
        app:backgroundTint="@android:color/holo_red_dark"
        app:elevation="6dp"
        app:borderWidth="0dp"
        app:layout_anchorGravity="center_horizontal"
        android:layout_gravity="center_horizontal" />

</android.support.v7.widget.CardView>

答案 1 :(得分:10)

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeTable>(entity =>
        entity.HasCheckConstraint("CK_SomeTable_SomeColumn", "[SomeColumn] >= X");
}

答案 2 :(得分:0)

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");
        }