【发布时间】:2019-11-12 18:01:56
【问题描述】:
仅当标志为真时如何设置为必需?
例如:
Property(t => t.DataQualityReview)
.If(t.IsDataQualityReview == true)
.ThenIsRequired()
【问题讨论】:
标签: .net entity-framework-core ef-core-2.0
仅当标志为真时如何设置为必需?
例如:
Property(t => t.DataQualityReview)
.If(t.IsDataQualityReview == true)
.ThenIsRequired()
【问题讨论】:
标签: .net entity-framework-core ef-core-2.0
我认为数据库将无法强制执行这种约束。 您可以通过多种方式以不同的方式强制执行要求。
选项 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;
}
}
如图所示,您无法在Foo 之外更改IsDataQualityReview 和DataQualityReview。然后,您公开一个方法 UpdateReview,它会根据评论更改这两个属性。
【讨论】: