Ядро EF — добавьте ограничение для нескольких свойств, чтобы одно из них было обязательным, но не для всех

#entity-framework #entity-framework-core #ef-fluent-api #ef-core-5.0

#entity-framework #entity-framework-core #ef-fluent-api #ef-core-5.0

Вопрос:

У меня есть класс с некоторыми свойствами, и я хочу определить ограничение на два свойства (тип int), чтобы одно из них было обязательным, но не оба. В SQL это будет выглядеть так:

 ALTER TABLE <table_name>
ADD CONSTRAINT <constraint_name> CHECK
((<first_field> IS NOT NULL AND <second_field> IS NULL) OR
(<second_field> IS NOT NULL AND <first_field> IS NULL))
 

Возможно ли это с помощью FluentAPI?

Ответ №1:

Вы можете использовать HasCheckConstraint, например

 modelBuilder.Entity<Customer>().Property(p => p.Name).HasColumnName("Name");
modelBuilder.Entity<Customer>().Property(p => p.Description).HasColumnName("Description");
modelBuilder.Entity<Customer>().HasCheckConstraint("ck_NameOrDescription", $"Name is not null or Description is not null");
 

Комментарии:

1. Чтобы получить именно то, что я хотел, я изменил на: $»Имя не равно нулю, а описание равно нулю или Описание не равно нулю, а имя равно нулю», спасибо.