基本类型的必填属性没有意义

时间:2019-04-10 18:01:56

标签: c# entity-framework asp.net-web-api data-annotations

在我的用例中,我需要一个必需的布尔属性,例如:

public class Todo 
{ 
    [Required] 
    public bool IsDone {get; set; } 
}

由于缺少布尔型属性的属性映射(未设置值),我在Entity Framework项目中遇到了一个错误。结果,我总是存储默认布尔值'false',而实际上并没有填充。当不填充时,我希望抛出验证异常,但由于它是原始类型,因此验证属性毫无意义,因为它始终具有默认值这足以通过。我不想使用默认值,并且未设置该值时,validation属性应引发异常。

我想出的一个解决方案是将nullable布尔值与required属性一起使用。如果未设置该属性,则必需的属性将引发一个异常,该异常很好。另一方面,有一个必填的可为空的布尔值很奇怪,因为您知道它总是被填充(由于必填属性),并且使该属性的业务逻辑可读性降低(IsDone.HasValue?IsDone.Value:false; / 不可能,因为它是必需的 /)。

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

这里有很多选项。 您想要的是一种三态机制:未设置,正确,错误

可为空的布尔确实提供了这一点,但是主要问题是消费者是否很清楚。

第二种选择是创建一个三态枚举并使用它。

  • 更清楚吗?也许
  • 它可以扩展吗?是的,但是我们真的需要3个以上的州吗?

在这两者之间,我自己会使用可为空的布尔值。最后,这是一种挑剔的情况。