Я думаю, что база данных не сможет навязать такого рода ограничения.
Есть пара способов, которыми вы могли бы выполнить требование другим способом.
Вариант 1 (предпочтительно):
Если вы можете изменить схему базы данных, вы можете создать отдельную сущность / таблицу, которая будет представлять DataQualityReview
.
public class Foo
{
// optional DataQualityReview
public int? DataQualityReviewId { get; set; }
public DataQualityReview DataQualityReview { get; set; }
}
public class DataQualityReview
{
public int DataQualityReviewId { get; set; }
// required properties of a review
public string Comments { get; set; }
public int Rating { get; set; }
}
Идея в том, что Foo
может иметь или не иметь DataQualityReview
. Если у него есть обзор, вы можете применить другие свойства (например, Comments
, Rating
и т. Д.), Которые должны быть обязательными.
Вариант 2 : Если вы не можете изменить базу данных. Вы можете применить это в самом классе.
public class Foo
{
// notice `private set`
public bool IsDataQualityReview { get; private set; }
public string DataQualityReview { get; private set; }
public void UpdateReview(string review)
{
DataQualityReview = review;
IsDataQualityReview = review != null;
}
}
Как показано, вы не можете изменить IsDataQualityReview
и DataQualityReview
за пределами Foo
. Затем вы предоставляете метод UpdateReview
, который изменяет оба эти свойства на основе обзора.