是否可以在Entity Framework 7中使用流畅的API添加CHECK约束?
我需要做到这样的事情:
...
ADD CONSTRAINT CK_SomeTable_SomeColumn CHECK (SomeColumn >= X);
如果解决方案是提供者特定的,那就没问题 - 我只针对MsSqlServer(至少现在)。
答案 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");
}