在我的用例中,我需要一个必需的布尔属性,例如:
public class Todo
{
[Required]
public bool IsDone {get; set; }
}
由于缺少布尔型属性的属性映射(未设置值),我在Entity Framework项目中遇到了一个错误。结果,我总是存储默认布尔值'false',而实际上并没有填充。当不填充时,我希望抛出验证异常,但由于它是原始类型,因此验证属性毫无意义,因为它始终具有默认值这足以通过。我不想使用默认值,并且未设置该值时,validation属性应引发异常。
我想出的一个解决方案是将nullable布尔值与required属性一起使用。如果未设置该属性,则必需的属性将引发一个异常,该异常很好。另一方面,有一个必填的可为空的布尔值很奇怪,因为您知道它总是被填充(由于必填属性),并且使该属性的业务逻辑可读性降低(IsDone.HasValue?IsDone.Value:false; / 不可能,因为它是必需的 /)。
还有其他解决方案吗?
答案 0 :(得分:1)
这里有很多选项。 您想要的是一种三态机制:未设置,正确,错误
可为空的布尔确实提供了这一点,但是主要问题是消费者是否很清楚。
第二种选择是创建一个三态枚举并使用它。
在这两者之间,我自己会使用可为空的布尔值。最后,这是一种挑剔的情况。